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'
你想要什么样的逻辑?