我正在使用可重复读取隔离级别处理事务。我想在此事务中合并 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