Я створюю скрипт для автоматичного перенесення змін з декількох баз даних розробки в індексування / виробництво. В основному, для цього потрібна купа сценаріїв змін і об’єднується в один сценарій, обертаючи кожен сценарій у 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, яку ви відстежуєте та повідомляєте про помилку. Оскільки ви генеруєте їх автоматично, внесення подібних змін повинно бути легким. Це просто схоже на те, що ви, звичайно, не хочете досліджувати цей маршрут, коли, на мою думку, є шляхи вирішення всіх ваших проблем.