Створюючи збережену процедуру на 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. Це зекономить багато часу для мене.