Puede crear procedimientos almacenados que hagan referencia a objetos que aún no existen (por ejemplo, tablas y funciones). No puede crear procedimientos almacenados que hagan referencia a columnas que aún no existen en objetos que ya existen. Esta es la espada de doble filo de la resolución de nombres diferidos: SQL Server le brinda el beneficio de la duda en algunos casos, pero no en todos. Vea las ideas de Erland para SET STRICT_CHECKS ON;
obtener algunas ideas de los lugares donde funciona y los lugares que rompe:
http://www.sommarskog.se/strict_checks.html
(Y cómo le gustaría el polo opuesto de lo que está buscando: desea permitir que se compile cualquier cosa independientemente de su existencia, y él quiere que se verifique cada columna o tabla).
No hay una configuración como SET DEFERRED_NAME_RESOLUTION OFF;
si se hubiera solicitado:
http://connect.microsoft.com/sql/127152
Y no hay configuración como IGNORE ALL_RESOLUTION;
.
Puede solucionar esto de varias maneras, que incluyen:
(a) use SQL dinámico en los procedimientos almacenados afectados.
(b) construya un trozo CREATE PROCEDURE
sin nada, luego ejecute el resto de su script, luego ejecute uno ALTER PROCEDURE
que tenga el cuerpo real (en esencia, implemente el procedimiento en dos fases).
(c) haga que su herramienta de implementación sea más inteligente sobre el orden de las operaciones. Si los cambios en la tabla requieren la presencia de una función, guíe esos cambios en último lugar. Las herramientas de comparación de esquemas como SQL Compare de RedGate son bastante buenas para generar scripts para usted en el orden de dependencia adecuado. No mencionas qué herramienta estás usando, pero si no está haciendo esto ...
(d) Martin Smith tiene una solución interesante aquí , pero no he jugado con ella.