Al crear un procedimiento almacenado en SQL Server, puede hacer referencia a tablas que no existen. Pero, si la tabla existe, entonces cualquier columna a la que se refiera en el procedimiento debe existir en esa tabla ( Resolución de nombre diferido ).
¿Es posible indicar a SQL Server que difiera la resolución de nombres de todas las tablas a las que se hace referencia en un procedimiento, independientemente de si existen o no? Quiero mantener la comprobación general de la sintaxis, por lo que, incluso si fuera posible, piratear la definición del procedimiento almacenado en una tabla del sistema no es una opción.
Supongo que pedir esto puede parecer un poco extraño , así que aquí hay algunos antecedentes: genero automáticamente definiciones de tabla y procedimientos almacenados a partir de una aplicación escrita en C # y es muy difícil para mí cambiar el código para ordenar los cambios según lo necesite SQL ellos. Mi código "garantiza" que el esquema es coherente dentro de una transacción, pero actualmente no puedo garantizar que las columnas de la tabla estén definidas antes de definir el procedimiento almacenado que hace referencia a ellas.
A continuación se muestra un ejemplo canónico del SQL creado por C # que "ilustra" el problema que estoy tratando de resolver.
--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
Que es posible para mí Para solucionar esto en el código C #, pero estoy esperando por una simple "mágica" ajustar puedo tirar en el SQL. Esto me ahorrará mucho tiempo.