Stored procedures SQL存储过程帮助

Stored procedures SQL存储过程帮助,stored-procedures,Stored Procedures,我正在努力实现: 一种存储过程,它至少接受一个参数,并根据参数中传递的值更新一个或多个记录。作为同一事务的一部分发出的两个更新命令。一种错误处理程序,在事务发生错误时执行 使用此存储过程: DROP PROCEDURE uspPatByState; GO CREATE PROCEDURE uspPatByState (@St varchar (2), @state varchar (2) OUTPUT) AS BEGIN SELECT * FROM PATIENTS

我正在努力实现:

一种存储过程,它至少接受一个参数,并根据参数中传递的值更新一个或多个记录。作为同一事务的一部分发出的两个更新命令。一种错误处理程序,在事务发生错误时执行

使用此存储过程:

DROP PROCEDURE uspPatByState;
GO

CREATE PROCEDURE uspPatByState
     (@St varchar (2),  @state varchar (2) OUTPUT)
AS
BEGIN
    SELECT *
    FROM PATIENTS
    WHERE STATE = @St;

    IF @St IS NOT NULL
        SET @St = @state;

    UPDATE PATIENTS
    SET City = 'Los Angeles' 
    WHERE City = 'Honolulu'

    UPDATE PATIENTS
    SET ZipCode = '96801'
    WHERE ZipCode = '55555'

    SELECT *
    FROM PATIENTS
    WHERE STATE = @state        

    RETURN
END
GO

EXEC  uspPatByState  @St = 'CA' , @state= 'HI'
但它不起作用。我得到:

Address1    Address2    City    State   ZipCode
1831 Universal Ave  NULL    Los Angeles CA  55555
1831 Universal Ave  NULL    Los Angeles CA  55555
我需要看到的是:

Address1      Address2  City    State   ZipCode
1831 Universal Ave  NULL    Honolulu    HI  96801
1831 Universal Ave  NULL    Honolulu    HI  96801

我不太明白你想要什么样的逻辑,或者你想要做什么。但以下是我将如何使用事务和错误处理:

USE mydb;
DROP PROCEDURE uspPatByState;

GO

CREATE PROCEDURE uspPatByState
 (@St varchar (2),  @state varchar (2) OUTPUT)

AS
BEGIN
   BEGIN TRY
         BEGIN TRANSACTION
        IF(SELECT COUNT(*) FROM PATIENTS WHERE [state] = @st)
        BEGIN 
             UPDATE PATIENTS
                SET City =  'Los Angeles' 
                 WHERE City =  'Honolulu'

               UPDATE PATIENTS
                 SET ZipCode = '96801'
                    WHERE ZipCode = '55555'
        END ELSE 
        BEGIN 
          SET @state = @st
        END 
        SELECT * FROM PATIENTS WHERE STATE = @st 
         COMMIT TRANSACTION;
   END TRY
   BEGIN CATCH
         ROLLBACK TRANSACTION;
         SELECT ERROR_MESSAGE() AS ErrorMessage;
   END CATCH;
RETURN
END

GO

EXEC  uspPatByState  @St = 'CA' , @state= 'HI'

你想要什么样的逻辑?