【问题标题】:Update stored procedure - SQL Server 2012更新存储过程 - SQL Server 2012
【发布时间】: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


【解决方案1】:

您正在检查personid(整数)列与password 列,它是nvarchar。更新您的查询以使用正确的参数或列,您的代码应该可以工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多