Неверное сообщение об ошибке в скрипте SQL Server
Я привык использовать базу данных alter script на столе dbVersion
и каждое изменение в базе данных было в условии if.
например:
DECLARE @DbVersion BIGINT,
@now DATETIME = GETDATE()
IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE TYPE = 'U' and NAME = 'dbversion') BEGIN
CREATE TABLE dbversion
(
Id BIGINT NOT NULL IDENTITY PRIMARY KEY,
Version INT NOT NULL,
Description NVARCHAR(2048) NULL,
Created DATETIME2 NOT NULL DEFAULT GETDATE(),
Stamp TIMESTAMP NOT NULL
)
INSERT INTO dbversion (version, description, created)
VALUES (0, 'Create version table for database', GETDATE())
END
SELECT @DbVersion = MAX(version) FROM dbversion
IF @DbVersion = 0 BEGIN
CREATE TABLE AppUserRole
(
Id BIGINT NOT NULL PRIMARY KEY,
RoleName NVARCHAR(16) NOT NULL,
RoleDescription NVARCHAR(64) NOT NULL,
CreatedDate DATETIME2 NOT NULL DEFAULT GETDATE()
)
INSERT INTO AppUserRole(Id, RoleName, RoleDescription, CreatedDate)
VALUES (1, 'role 1', 'role description', @now),
(2, 'role 2', 'role description', @now),
(3, 'role 3', 'role description', @now)
SET @DbVersion = @DbVersion + 1
INSERT INTO dbversion (version, description, created)
VALUES (@DbVersion, 'description', @now)
END
Хорошо. Я бросаю колонну CreatedDate
из таблицы AppUserRole
в следующей версии:
IF @DbVersion = 1
BEGIN
ALTER TABLE AppUserRole DROP COLUMN CreatedDate
SET @DbVersion = @DbVersion + 1
INSERT INTO dbversion (version, description, created)
VALUES (@DbVersion, 'description', @now)
END
Я начинаю использовать SQL Server Management Studio v17.1 для SQL Server 13.0. В более старой версии Management Studio скрипт всегда выполнялся без ошибок.
В новой версии редактора я получаю сообщение об ошибке
Неверное имя столбца 'CreatedDate'
и скрипт даже не запускается.
Такое поведение начнется только при обновлении кэша структуры таблицы - до тех пор, пока я не смогу запускать скрипт снова и снова без ошибок.
На мой взгляд, Management Studio не должна показывать эту ошибку, потому что в этом месте в скрипте нет ошибки по сути. Если кто-то удаляет записи в dbVersion
Таблица, ошибка должна возникать во время выполнения.
Когда я пытаюсь отладить этот скрипт, Management Studio не разрешает его, потому что скрипт заканчивается на первом правильном коде (обычно используется dbNAme)
Есть ли способ предотвратить такое поведение сценария? Я использую эти сценарии структурированных БД во многих проектах и не хочу их переписывать - некоторые из них уже очень обширны.
Спасибо