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
を実行すると、次のエラーが発生します。
メッセージ102、レベル15、状態1、行257
「THROW」付近の構文が正しくありません。
THROW
をPRINT @ErrorMessage
で置き換えることはできます。
@ErrorMessage
変数をリテラル文字列に置き換えると機能します。
ただし、ドキュメントによれば、THROWは変数を受け取ることができるとされています。これをどうするかわかりません。
から [〜#〜] msdn [〜#〜] :
THROWステートメントの前のステートメントの後には、セミコロン(;)ステートメントの終了文字を続ける必要があります。
スローに関するドキュメント、備考 から:
THROWステートメントの前のステートメントの後には、セミコロン(;)ステートメントの終了文字を続ける必要があります。
ステートメントは常にセミコロンで終了するのが良い習慣です。
同じエラーが発生しましたが、理由はまったく異なります。私が使用しているマシンは少し古いですが、SSMS 2012(Throwが導入されたバージョン)を搭載しています。ただし、実際のSQLサーバーは10.5(2008 R2です。 https://docs.Microsoft.com/en-us/sql/t-sql/statements/alter-database-transact-sql-compatibility-を参照) level )なので、コマンドは無効です。
うまくいけば、10年前のセットアップのインスタンスが多すぎることはありませんが、これが表示され、構文が正しいことを確認してください。