Неверное сообщение об ошибке в скрипте 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)

Есть ли способ предотвратить такое поведение сценария? Я использую эти сценарии структурированных БД во многих проектах и ​​не хочу их переписывать - некоторые из них уже очень обширны.

Спасибо

0 ответов

Другие вопросы по тегам