web-dev-qa-db-ja.com

「THROW」付近の構文が正しくありません

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」付近の構文が正しくありません。

THROWPRINT @ErrorMessageで置き換えることはできます。

@ErrorMessage変数をリテラル文字列に置き換えると機能します。

ただし、ドキュメントによれば、THROWは変数を受け取ることができるとされています。これをどうするかわかりません。

25
Metaphor

から [〜#〜] msdn [〜#〜]

THROWステートメントの前のステートメントの後には、セミコロン(;)ステートメントの終了文字を続ける必要があります。

36
Sam Axe

スローに関するドキュメント、備考 から:

THROWステートメントの前のステートメントの後には、セミコロン(;)ステートメントの終了文字を続ける必要があります。

ステートメントは常にセミコロンで終了するのが良い習慣です。

6
TT.

同じエラーが発生しましたが、理由はまったく異なります。私が使用しているマシンは少し古いですが、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年前のセットアップのインスタンスが多すぎることはありませんが、これが表示され、構文が正しいことを確認してください。

4
d219