作成中にコマンドがクエリバッチの最初のステートメントでなければならないオブジェクトのタイプのリストが見つかりません。これまでのところ、function/stored_procedure/viewが最初でなければならないことがわかりました。
これが必要な理由を誰かが知っていますか?確かに理由はあると思いますが、それは私を逃れます。ストアドプロシージャが頭に浮かぶ唯一の理由は、プロシージャのENDの背後にあるコードの奇妙な解釈です。 SPが呼び出され、CREATE STATEMENTSがそれ以上あった場合、SQLサーバーは引き続きコードを実行し、結果は混乱します。
背景:私は作成/削除/無効化/有効化などのスクリプトを作成しようとしています。実行前に動的exec()に何を入れるかを知る必要があります。はい、私はexec()ですべてのステートメントをラップするかもしれませんが、それから私は何も学びません。
から http://msdn.Microsoft.com/en-us/library/ms175502(v = sql.105).aspx
バッチを使用するための規則
バッチの使用には、次のルールが適用されます。
- CREATE DEFAULT、CREATE FUNCTION、CREATE PROCEDURE、CREATE RULE、CREATE SCHEMA、CREATE TRIGGER、およびCREATE VIEWステートメントは、バッチ内の他のステートメントと組み合わせることはできません。 CREATEステートメントはバッチを開始する必要があります。そのバッチで続く他のすべてのステートメントは、最初のCREATEステートメントの定義の一部として解釈されます。
- テーブルを変更してから、同じバッチで参照される新しい列を変更することはできません。
- EXECUTEステートメントがバッチの最初のステートメントである場合、EXECUTEキーワードは不要です。 EXECUTEステートメントがバッチ内の最初のステートメントでない場合は、EXECUTEキーワードが必要です。