まだ存在しないオブジェクト(テーブルや関数など)を参照するストアドプロシージャを作成できます。既に存在するオブジェクトにまだ存在しない列を参照するストアドプロシージャを作成することはできません。これは、名前解決の遅延の両刃の剣です。SQLServerには、すべてではない場合もありますが、疑問の恩恵があります。Erlandのアイデアを参照してSET STRICT_CHECKS ON;
、これが機能する場所とそれが壊れる場所のアイデアを入手してください。
http://www.sommarskog.se/strict_checks.html
(そして、彼はあなたが望んでいるものの正反対をどのように望んでいますか-あなたは存在に関係なく何でもコンパイルできるようにしたい、そして彼はすべての単一の列またはテーブルがチェックされることを望んでいます)
次のような設定はありませんSET DEFERRED_NAME_RESOLUTION OFF;
:
http://connect.microsoft.com/sql/127152
そして、のような設定はありませんIGNORE ALL_RESOLUTION;
。
次のようないくつかの方法でこれを回避できます。
(a)影響を受けるストアドプロシージャで動的SQLを使用します。
(b)CREATE PROCEDURE
何も含まないスタブを構築し、残りのスクリプトを実行ALTER PROCEDURE
してから、実際の本体を持つを実行します(本質的に、2段階でプロシージャを展開します)。
(c)操作の順序について、展開ツールをよりスマートにします。テーブルの変更に関数の存在が必要な場合は、それらの変更を最後にスクリプト化します。RedGateのSQL Compareなどのスキーマ比較ツールは、適切な依存関係の順序でスクリプトを生成するのに適しています。使用しているツールについては言及しませんが、これを行っていない場合は...
(d)Martin Smithにはここで興味深い回避策がありますが、私はそれを試していません。