"THROW"附近的语法不正确

Met*_*hor 24 t-sql sql-server sql-server-2014

IF @SQL IS NOT NULL
BEGIN
    BEGIN TRY 
        EXEC sp_executesql @SQL
        PRINT 'SUCCESS: ' + @SQL
    END TRY 
    BEGIN CATCH
        SET @ErrorMessage = 
                    N'Error dropping constraint' + @CRLF
                    + 'Table ' + @TableName + @CRLF
                    + 'Script: ' + @SQL + @CRLF
                    + 'Error message: ' + ERROR_MESSAGE() + @CRLF
        THROW  50100, @ErrorMessage, 1;
    END CATCH
END
Run Code Online (Sandbox Code Playgroud)

CATCH执行时,我得到以下错误:

消息102,级别15,状态1,行
257'THROW'附近的语法不正确.

更换THROWPRINT @ErrorMessage作品.

@ErrorMessage用文字字符串替换变量有效.

然而,根据文档,THROW应该能够采用变量.不知道该怎么做.

Sam*_*Axe 33

来自MSDN:

THROW语句之前的语句必须后跟分号(;)语句终止符.

  • 我想我会拼写它;从现在开始.谢谢! (12认同)
  • 好计划.当某些关键字有特殊规则而其他关键字没有特别规则时,这真的很烦人. (4认同)

TT.*_*TT. 6

来自THROW文档,备注:

THROW语句之前的语句必须后跟分号(;)语句终止符.

总是以分号结束你的陈述是一个好习惯.

  • “总是用分号结束您的陈述是一个好习惯。” 可以,但是给定“如果@@ rowcount = 0开始抛出###,'',#end`,必须以分号终止“ begin”真的很奇怪。 (3认同)
  • 这就是为什么我觉得构建想要以分号终止 `begin` 很奇怪。 (2认同)

d21*_*219 6

我只是遇到了同样的错误,但出于完全不同的原因。我使用的机器有点旧,但有 SSMS 2012(THROW引入的版本)。然而,实际的 SQL 服务器是 10.5(即 2008 R2;请参阅https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-database-transact-sql-compatibility-level)等等命令无效。

希望不会有太多十年前设置的实例,但请仔细检查您是否收到此信息,并确定您的语法是正确的!