【问题标题】:Incorrect syntax near Throw - what am I missing?Throw 附近的语法不正确 - 我错过了什么?
【发布时间】:2017-12-15 08:59:09
【问题描述】:

我正在尝试执行这样的 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 之前有;。我也在检查引用的语法,但看不到为什么执行它会返回

消息 102,级别 15,状态 1,第 11 行 'Throw' 附近的语法不正确。

【问题讨论】:

    标签: sql-server tsql


    【解决方案1】:

    您在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
    

    【讨论】:

    • 即使我只是做begin catch throw; end catch; 它仍然给我同样的错误。但是您的答案有效,因此感谢您的解决方法。
    猜你喜欢
    • 2016-05-02
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    相关资源
    最近更新 更多