Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新存储过程-SQL Server 2012_Sql_Stored Procedures_Sql Server 2012 - Fatal编程技术网

更新存储过程-SQL Server 2012

更新存储过程-SQL Server 2012,sql,stored-procedures,sql-server-2012,Sql,Stored Procedures,Sql Server 2012,我有一个错误,我找不到这个过程失败的原因。我所知道的只是它做了一些我一无所知的事情。有人知道这是怎么回事吗| ALTER PROCEDURE [dbo].[updateAccountPersonJob] @department nvarchar(50), @description nvarchar(50), @personID int, @name nvarchar(50), @surname nvarchar(50), @email nvarc

我有一个错误,我找不到这个过程失败的原因。我所知道的只是它做了一些我一无所知的事情。有人知道这是怎么回事吗|

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;
执行官:

错误:

将nvarchar值“director”转换为数据类型int时,转换失败


您正在检查
personid
(整数)列与
password
列,该列为nvarchar。更新您的查询以使用正确的参数或列,如果运行
SELECT id FROM Jobs WHERE department=@department and description=@description
,您的代码应该可以运行,结果是什么?您能用两个表的表结构编辑您的问题吗?表上有触发器吗?@BogdanM.,这可能与您遇到的错误无关,您正在检查personid和密码列OMG。。谢谢你,请以Response的形式发布,我很忙,看起来我很累…错误消息还暗示你正在以明文形式存储密码。这很糟糕。至少你应该对它们进行散列/盐析并比较散列。
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'