投掷附近的语法不正确 - 我错过了什么?

时间:2017-12-15 08:59:10

标签: sql-server tsql

我正在尝试执行类似的THROW语句(value12345是一些随机值):

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 reference

我查看了this question,我;之前有THROW。我也在检查引用的语法,但没有看到为什么执行它返回

  

Msg 102,Level 15,State 1,Line 11   “投掷”附近的语法不正确。

1 个答案:

答案 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