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应该能够采用变量。不知道该怎么做。
答案 0 :(得分:29)
来自MSDN:
THROW语句之前的语句必须后跟分号(;)语句终止符。
答案 1 :(得分:5)
答案 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),因此该命令无效。
希望不会有太多十年设置的实例,但仔细检查一下,如果你得到这个,你确定你的语法是正确的!