2011-01-31 126 views
15

我想改變一個表來添加一個新的列,然後插入一個新的行。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 Server Management Studio中上面的SQL。我認爲這是一個Studio錯誤,而不是服務器錯誤。如果SQL運行,它應該工作,因爲該列將存在於此時。

如何添加一個新的列到表中,然後插入到該表中?

版本:

  • 的SQL Server 2000
  • SQL Server Management Studio中2008

回答

18

正如預期的那樣。 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()) 
') 

A「GO」僅適用於客戶端工具一批分離器,而不是由服務器

+1

有沒有辦法關閉這個批處理?我在我的SQL文件中有關於20-30項的這個問題。它將數據庫從一個版本更新到另一個版本。 – Justin808 2011-01-31 20:15:11

0

什麼transations認可?

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;