È possibile creare procedure memorizzate che fanno riferimento a oggetti che non esistono ancora (ad esempio tabelle e funzioni). Non è possibile creare procedure memorizzate che fanno riferimento a colonne che non esistono ancora in oggetti che già esistono. Questa è la spada a doppio taglio della risoluzione differita dei nomi: in alcuni casi SQL Server offre il vantaggio del dubbio, ma non tutti. Guarda le idee di Erland per SET STRICT_CHECKS ON;
ottenere alcune idee sui luoghi in cui funziona e sui luoghi in cui si rompe:
http://www.sommarskog.se/strict_checks.html
(E come vorrebbe l'opposto polare di ciò che stai cercando: vuoi consentire a qualsiasi cosa di essere compilata indipendentemente dall'esistenza, e vuole che ogni singola colonna o tabella venga controllata.)
Non è possibile impostare come SET DEFERRED_NAME_RESOLUTION OFF;
se fosse stato richiesto:
http://connect.microsoft.com/sql/127152
E non c'è impostazione come IGNORE ALL_RESOLUTION;
.
Puoi aggirare il problema in diversi modi, tra cui:
(a) utilizzare SQL dinamico nelle stored procedure interessate.
(b) crea uno stub per CREATE PROCEDURE
cui non contiene nulla, quindi esegui il resto dello script, quindi esegui unALTER PROCEDURE
contiene che ha il corpo reale (in sostanza, distribuisci la procedura in due fasi).
(c) rendere lo strumento di implementazione più intelligente sull'ordine delle operazioni. Se le modifiche alla tabella richiedono la presenza di una funzione, eseguire lo script delle ultime modifiche. Gli strumenti di confronto degli schemi come Red Compare di SQL di RedGate sono piuttosto efficaci nel generare script per te nel giusto ordine di dipendenza. Non dici quale strumento stai usando, ma se non lo fa ...
(d) Martin Smith ha una soluzione interessante qui , ma non ci ho giocato.