【发布时间】:2013-06-03 20:09:46
【问题描述】:
我有一个错误,我找不到此过程失败的原因。我只知道它做了一些我不知道的事情。有谁知道这是怎么回事? :|
ALTER PROCEDURE [dbo].[updateAccountPersonJob]
@department nvarchar(50),
@description nvarchar(50),
@personID int,
@name nvarchar(50),
@surname nvarchar(50),
@email nvarchar(50),
@username nvarchar(50),
@password nvarchar(50),
@status nvarchar(50)
AS
BEGIN TRANSACTION
DECLARE @missionID int, @jobID int;
BEGIN TRY
SET @jobID = (SELECT id FROM Jobs
WHERE department = @department AND description = @description)
UPDATE Persons
SET name = @name, surname = @surname, email = @email, jobID = @jobID
WHERE Persons.id = @personID
UPDATE Accounts
SET Username = @username, Password = @password, Status = @status
WHERE Accounts.Password = @personID
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage;
BEGIN IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
PRINT('ROLLBACK')
END
END CATCH;
IF @@TRANCOUNT > 0
COMMIT TRANSACTION;
执行:
EXEC [dbo].updateAccountPersonJob
@department = N'Facultatea de Matematica si Informatica',
@description = N'Teacher',
@personID = N'16',
@name = N'Dummy',
@surname = N'BarFOO',
@email = N'bar@ba.com',
@username = N'dummy',
@password = N'd',
@status = N'Teacher'
错误:
将 nvarchar 值 'director' 转换为数据类型 int 时转换失败。
【问题讨论】:
-
如果你运行
SELECT id FROM Jobs WHERE department = @department AND description = @description,你会得到什么结果? -
你能用两个表的表结构来编辑你的问题吗?桌子上有触发器吗?
-
@BogdanM.,这可能与您遇到的错误无关,您正在根据密码列检查 personid
-
omg.. .. .. .. 谢谢,请发帖回复,我赶时间,看来我很累了...
-
此外,错误消息暗示您正在以纯文本形式存储密码。这是不好的。至少你应该对它们进行散列/加盐并比较散列。
标签: sql stored-procedures sql-server-2012