Repeatable Read Isolation Level を使用してトランザクションに取り組んでいます。このトランザクションに、Try-Catch とエラー ハンドラーの両方の機能を組み込みたいと考えています。コードを実行すると、次のようなエラー メッセージが表示されます: Msg 102, Level 15, State 1, Line 18 Incorrect syntax near 'BEGIN'. メッセージ 102、レベル 15、状態 1、行 23 '@errnum' 付近の構文が正しくありません。
このトランザクションを正常に完了するにはどうすればよいですか? または、このトランザクションを記述する正しい方法は何ですか?
これは今の私の仕事です:
CREATE PROCEDURE ItemFlow (@Name VARCHAR(50),
@aPrice MONEY,
@bPrice MONEY)
AS
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
GO
BEGIN TRAN
IF EXISTS (SELECT 1
FROM Cashier
WHERE Item = '@Item')
UPDATE Cashier
SET bPrice = '@bPrice',
aprice = '@aprice'
WHERE Item = '@Item'
ELSE
INSERT INTO Cashier
(Item, aPrice, bPrice)
VALUES ('@Item', '@aPrice', '@bPrice')
END
BEGIN TRY
EXECUTE ItemFlow
END TRY
BEGIN CATCH
@errnum = ERROR_NUMBER(),
@severity = ERROR_SEVERITY(),
@errstate = ERROR_STATE(),
@proc = ERROR_PROCEDURE(),
@line = ERROR_LINE(),
@message = ERROR_MESSAGE()
END CATCH