SQL Server 2000 - ALTER TABLE + INSERT INTO = Ошибки? - PullRequest
15 голосов
/ 31 января 2011

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

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.Я думаю, что это ошибка студии, а не ошибка сервера.Если SQL был запущен, он должен работать так, как столбец будет существовать в этой точке.

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

Версии:

  • SQL Server 2000
  • SQL Server Management Studio 2008

Ответы [ 2 ]

19 голосов
/ 31 января 2011

Как и ожидалось. 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» является разделителем пакетов только для клиентских инструментов и не распознается сервером

0 голосов
/ 31 января 2011

А как же переводы?

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;
...