sql >> データベース >  >> RDS >> Sqlserver

SQL Server :USE データベースの優先順位の問題

    コメントにあるように、 GO を入れることはできません 次の理由により、相互に依存している SQL ステートメントのグループの途中にある:

    <オール> <リ>

    GO コンパイルされた 1 つのバッチの終わりと次のバッチの始まりを示します。ほとんどのステートメント コンテキスト (IF..ELSE など) ) GO にまたがることはできません .そして、

    <リ>

    GO SQL ステートメントでさえありません。これは Management Studio/SQLCMD コマンドであるため、他の場所では認識されません。

    あなたの状況は一般的なニーズですが、唯一の解決策はありません。リストした特定のケースでは、動的 SQL を使用するのがおそらく最善の方法です:

    IF EXISTS(select * from sys.databases where name='MyDB')
     BEGIN
       EXEC('
         USE MyDB
         EXEC(''
           DROP USER [tester]
            .
            .
            . 
         '')  
       ')
     END
    ELSE
     PRINT 'MyDB database is not available'
    

    これは、動的 SQL 実行がそれぞれ独自のバッチを構成し、両方が GO の代わりになるという事実を利用しています。 の効果 (新しいバッチの開始) と USE の独特な相互作用を分離する コンパイラで。 USE..GO の後に物事を「二重ラップ」する必要があるため、もちろん非常に厄介です。 コマンド。

    また、この二重ラップのため、内部の文字列は 4 重引用符で囲む必要があることに注意してください。



    1. T-SQLでテーブル変数をループできますか?

    2. MD5をデータベースに保存するときのBINARY(16)とCHAR(32)の違い

    3. 値が変更されたときにMySQLはユーザー変数をインクリメントします

    4. WordPressMediaWikiの統合