SQL Serverでストアドプロシージャを作成する場合、存在しないテーブルを参照できます。ただし、テーブルが存在する場合は、手順で参照するすべての列がそのテーブルに存在する必要があります(遅延名前解決)。
存在するかどうかに関係なく、プロシージャで参照されるすべてのテーブルの名前解決を遅らせるようにSQL Serverに指示することはできますか?一般的な構文チェックを維持したいので、可能であったとしても、ストアドプロシージャ定義をシステムテーブルにハッキングすることはできません。
私はこれを行うことを要求することは少し奇妙に思われるかもしれないと思うので、ここにいくつかの背景があります:C#で書かれたアプリケーションからテーブル定義とストアドプロシージャを自動生成し、SQLの必要に応じてコードを変更して変更を順序付けるのは非常に困難ですそれら。私のコードは、スキーマがトランザクション内で一貫していることを「保証」しますが、現在、テーブルカラムを定義する前に、それらを参照するストアドプロシージャを定義することは保証できません。
以下は、C#によって作成されたSQLの標準的な例であり、私が解決しようとしている問題を「例示」しています。
--Say this table already exists.
CREATE TABLE myTable
(
a NVARCHAR(MAX)
)
GO
--My C# code creates something like this
BEGIN TRAN
GO
--the stored procedure gets generated first.
CREATE PROCEDURE mySproc
AS
BEGIN
SELECT a,b FROM myTable
END
--then the table update
ALTER TABLE myTable
ADD b nvarchar(MAX)
COMMIT TRAN
C#コードでこれを修正することは可能ですが、SQLを取り込むことができる簡単な「魔法の」微調整を期待しています。これは私にとって多くの時間を節約します。