我正在尝试执行类似的THROW语句(value
和12345
是一些随机值):
use testdb;
go
begin try
if('value' in (select distinct shelf from itemloc))
update itemloc
set shelf = 'value'
where item = '12345';
end try
begin catch
;Throw 160073, 'Failed to update shelf value', 1;
end catch;
我查看了this question,我;
之前有THROW
。我也在检查引用的语法,但没有看到为什么执行它返回
Msg 102,Level 15,State 1,Line 11 “投掷”附近的语法不正确。
答案 0 :(得分:3)
您在CATCH
内,您无法在此处选择错误,只需使用THROW;
。此外,您不需要用分号开始语句,您已经在最后一个语句的末尾添加了一个分号。它是终结者(它在行的末尾),而不是在开头和结尾。
如果您想使用自定义错误,请使用RAISERROR
。例如:
USE TESTDB;
GO
BEGIN TRY
IF('value' IN (SELECT DISTINCT shelf FROM itemloc))
UPDATE itemloc
SET shelf = 'value'
WHERE item = '12345';
END TRY
BEGIN CATCH
DECLARE @ERROR VARCHAR(MAX);
SET @ERROR = 'Failed to update shelf value';
RAISERROR(@ERROR, 11, 160073);
END CATCH