我正在尝试执行像这样的 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 Incorrect syntax near 'Throw'.
最佳答案
你在一个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
关于sql-server - Throw 附近的语法不正确 - 我错过了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47828889/