SQL Server 2000 - ALTER TABLE + INSERT INTO = Ошибки?

Я пытаюсь изменить таблицу, чтобы добавить новый столбец, а затем вставить в нее новую строку.

ALTER TABLE Roles ADD ModifiedDate DateTime;
INSERT INTO Roles (Name, [Description], CreatedBy, BuiltIn, Created, ModifiedDate)
    VALUES ('Name', 'Description', 0, 1, GETDATE(), GETDATE())

но я получаю:

Msg 207, Level 16, State 1, Line 1
Invalid column name 'ModifiedDate'.

когда я пытаюсь запустить вышеуказанный SQL в SQL Server Management Studio. Я думаю, что это ошибка Studio, а не ошибка сервера. Если SQL был запущен, он должен работать, поскольку столбец будет существовать в этой точке.

Как добавить новый столбец в таблицу и вставить в эту таблицу?

Версии:

  • SQL Server 2000
  • SQL Server Management Studio 2008

Ответ 1

Как и ожидалось. SQL Server не выполняется по строкам. Он компилирует и анализирует пакет, и когда это происходит, столбец не существует.

Вам нужно отделить 2 действия, таким образом

ALTER TABLE Roles ADD ModifiedDate DateTime;
EXEC ('
    INSERT INTO Roles (Name, [Description], CreatedBy, BuiltIn, Created, ModifiedDate)
    VALUES (''Name'', ''Description'', 0, 1, GETDATE(), GETDATE())
')

"GO" - это разделитель пакетов только для клиентских инструментов и не распознается сервером

Ответ 2

Как насчет трансакций?

BEGIN TRANSACTION;
ALTER TABLE Roles ADD ModifiedDate DateTime;
GO;
COMMIT TRANSACTION;

BEGIN TRANSACTION;
INSERT INTO Roles (Name, [Description], CreatedBy, BuiltIn, Created, ModifiedDate) VALUES ('Name', 'Description', 0, 1, GETDATE(), GETDATE());
GO;
COMMIT TRANSACTION;