SQL Server 2000 - ALTER TABLE + INSERT INTO =错误?

时间:2011-01-31 20:08:38

标签: sql-server tsql sql-server-2000

我正在尝试更改表以添加新列,然后在其中插入新行。

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

2 个答案:

答案 0 :(得分: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())
')

“GO”是仅适用于客户端工具的批处理分隔符,服务器无法识别

答案 1 :(得分:0)

转换怎么样?

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;
相关问题