Quando si crea una procedura memorizzata in SQL Server, è possibile fare riferimento a tabelle che non esistono. Tuttavia, se la tabella esiste, qualsiasi colonna a cui fai riferimento nella procedura deve esistere in quella tabella ( Risoluzione dei nomi posticipati ).
È possibile indicare a SQL Server di rinviare la risoluzione dei nomi di tutte le tabelle a cui fa riferimento una procedura, indipendentemente dal fatto che esistano o meno? Voglio mantenere il controllo generale della sintassi, quindi anche se fosse possibile, l'hacking della definizione della procedura memorizzata in una tabella di sistema non è un'opzione.
Mi aspetto che la mia richiesta di fare ciò possa sembrare un po 'strana , quindi ecco alcuni retroscena: generazione automaticamente definizioni di tabelle e procedure memorizzate da un'applicazione scritta in C # ed è molto difficile per me cambiare il codice per ordinare le modifiche di cui SQL ha bisogno loro. Il mio codice "garantisce" che lo schema sia coerente all'interno di una transazione, ma attualmente non posso garantire che le colonne della tabella siano definite prima di definire la procedura memorizzata che le fa riferimento.
Di seguito è riportato un esempio canonico dell'SQL creato dal C # che "illustra" il problema che sto cercando di risolvere.
--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
E ' è possibile per me per risolvere questo problema nel codice C #, ma sto sperando in un semplice "magia" tweak posso tirare in SQL. Questo mi farà risparmiare un sacco di tempo.