“THROW”附近的语法不正确

时间:2016-01-25 21:54:57

标签: sql-server tsql 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

执行CATCH时,出现以下错误:

  

Msg 102,Level 15,State 1,Line 257
  “THROW”附近的语法不正确。

THROW替换PRINT @ErrorMessage

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

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

3 个答案:

答案 0 :(得分:29)

来自MSDN

  

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

答案 1 :(得分:5)

来自Documentation on THROW, Remarks

  

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

总是用分号结束你的陈述是个好习惯。

答案 2 :(得分:4)

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

希望不会有太多十年设置的实例,但仔细检查一下,如果你得到这个,你确定你的语法是正确的!