Vous pouvez créer des procédures stockées qui référencent des objets qui n'existent pas encore (par exemple des tables et des fonctions). Vous ne pouvez pas créer de procédures stockées qui référencent des colonnes qui n'existent pas encore dans des objets qui existent déjà. Il s'agit de l'épée à double tranchant de la résolution de noms différée - SQL Server vous offre le bénéfice du doute dans certains cas, mais pas dans tous. Voir les idées d'Erland pour SET STRICT_CHECKS ON;
avoir une idée des endroits où cela fonctionne et des endroits où il se casse:
http://www.sommarskog.se/strict_checks.html
(Et comment il aimerait l'opposé polaire de ce que vous recherchez - vous voulez permettre à tout de compiler indépendamment de l'existence, et il veut que chaque colonne ou table soit vérifiée.)
Il n'y a pas de paramètre comme SET DEFERRED_NAME_RESOLUTION OFF;
cela a été demandé:
http://connect.microsoft.com/sql/127152
Et il n'y a pas de réglage comme IGNORE ALL_RESOLUTION;
.
Vous pouvez contourner ce problème de plusieurs manières, notamment:
(a) utiliser du SQL dynamique dans les procédures stockées affectées.
(b) construisez un stub pour CREATE PROCEDURE
sans rien dedans, puis exécutez le reste de votre script, puis exécutez un ALTER PROCEDURE
qui a le corps réel (essentiellement, déployez la procédure en deux phases).
(c) rendre votre outil de déploiement plus intelligent quant à l'ordre des opérations. Si les modifications de table nécessitent la présence d'une fonction, scriptez ces modifications en dernier. Les outils de comparaison de schémas comme la comparaison SQL de RedGate sont assez bons pour générer des scripts pour vous dans l'ordre de dépendance approprié. Vous ne mentionnez pas quel outil vous utilisez, mais si ce n'est pas le cas ...
(d) Martin Smith a une solution intéressante ici , mais je n'ai pas joué avec.