При создании хранимой процедуры в SQL Server вы можете ссылаться на несуществующие таблицы. Но если таблица существует, то любой столбец, на который вы ссылаетесь в процедуре, должен существовать в этой таблице ( отложенное разрешение имен ).
Можно ли дать SQL Server команду отложить разрешение имен всех таблиц, на которые есть ссылки в процедуре, независимо от того, существуют они или нет? Я хочу сохранить общую проверку синтаксиса, поэтому, даже если бы это было возможно, взломать определение хранимой процедуры в системной таблице не вариант.
Я ожидаю, что мои просьбы сделать это могут показаться немного странными , поэтому приведу некоторую предысторию: я автоматически генерирую определения таблиц и хранимые процедуры из приложения, написанного на C #, и мне очень трудно изменить код, чтобы упорядочить изменения в соответствии с требованиями SQL их. Мой код «гарантирует», что схема согласована внутри транзакции, но в настоящее время я не могу гарантировать, что столбцы таблицы будут определены до того, как я определю хранимую процедуру, которая ссылается на них.
Ниже приведен канонический пример SQL, созданного C #, который «иллюстрирует» проблему, которую я пытаюсь решить.
--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
Это является возможным для меня , чтобы исправить это в C # код, но я надеюсь на простой «магии» Tweak я могу тянуть в SQL. Это сэкономит мне много времени.