Я створюю скрипт для автоматичного перенесення змін з декількох баз даних розробки в індексування / виробництво. В основному, для цього потрібна купа сценаріїв змін і об’єднується в один сценарій, обертаючи кожен сценарій у IF whatever BEGIN ... ENDвиписку.
Однак деякі сценарії вимагають GOоператора, щоб, наприклад, аналізатор SQL знав про новий стовпець після його створення.
ALTER TABLE dbo.EMPLOYEE
ADD COLUMN EMP_IS_ADMIN BIT NOT NULL
GO -- Necessary, or next line will generate "Unknown column: EMP_IS_ADMIN"
UPDATE dbo.EMPLOYEE SET EMP_IS_ADMIN = whatever
Однак, як тільки я загортаю це в IFблок:
IF whatever
BEGIN
ALTER TABLE dbo.EMPLOYEE ADD COLUMN EMP_IS_ADMIN BIT NOT NULL
GO
UPDATE dbo.EMPLOYEE SET EMP_IS_ADMIN = whatever
END
Це не вдається, тому що я надсилаю BEGINбез відповідності END. Однак, якщо я видалю це, GOвін знову скаржиться на невідому колонку.
Чи є спосіб створити та оновити один і той же стовпець у межах одного IFблоку?
GOвін повинен бути на рядку сам по собі, тому ви можете шукати лише цей випадок, а не кожен приклад слова GO. 2) Ви завжди можете записати, які оператори були успішно виконані. Або ви можете обернути все це у спробі / лові та використовувати власні номери рядків, використовуючи якусь змінну, наприклад @lineNo, яку ви відстежуєте та повідомляєте про помилку. Оскільки ви генеруєте їх автоматично, внесення подібних змін повинно бути легким. Це просто схоже на те, що ви, звичайно, не хочете досліджувати цей маршрут, коли, на мою думку, є шляхи вирішення всіх ваших проблем.