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;