Saat membuat prosedur tersimpan dalam SQL Server, Anda diizinkan untuk merujuk ke tabel yang tidak ada. Tetapi, jika tabel benar-benar ada, maka kolom apa pun yang Anda rujuk dalam prosedur harus ada dalam tabel tersebut ( Resolusi Nama Tangguhan ).
Apakah mungkin untuk menginstruksikan SQL Server untuk menunda resolusi nama semua tabel yang dirujuk dalam prosedur terlepas dari apakah mereka ada atau tidak? Saya ingin tetap memeriksa sintaksis secara umum, jadi walaupun itu mungkin, meretas definisi prosedur tersimpan ke dalam tabel sistem bukanlah suatu pilihan.
Saya berharap permintaan saya untuk melakukan ini mungkin tampak sedikit aneh , jadi inilah beberapa latar belakang: Saya otomatis menghasilkan definisi tabel dan prosedur tersimpan dari aplikasi yang ditulis dalam C # dan sangat sulit bagi saya untuk mengubah kode untuk memesan perubahan sesuai kebutuhan SQL mereka. Kode saya "menjamin" bahwa skema tersebut konsisten dalam suatu transaksi, tetapi saat ini saya tidak dapat menjamin bahwa kolom tabel didefinisikan sebelum saya mendefinisikan prosedur tersimpan yang merujuknya.
Di bawah ini adalah contoh kanonik dari SQL yang dibuat oleh C # yang "menggambarkan" masalah yang saya coba selesaikan.
--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
Hal ini mungkin bagi saya untuk memperbaiki ini dalam kode C #, tapi aku berharap untuk sederhana "ajaib" tweak saya bisa menarik SQL. Ini akan menghemat banyak waktu untuk saya.