2011-01-31 22 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が機能します。

テーブルに新しい列を追加し、そのテーブルに挿入するにはどうすればよいですか?

バージョン:

  • SQL Server 2000の
  • SQL Server Management Studioの2008年予想通り

答えて

18

。 SQL Serverは行ごとに実行されません。バッチをコンパイルして解析します。このとき、カラムは存在しません。あなたは、このように

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」2つのアクションを分離する必要が

は、クライアントツールだけのためのバッチ区切りであり、サーバ

+1

このバッチ処理をオフにする方法はありますか?私はこの問題を私のSQLファイルに20〜30件ほど載せています。あるバージョンから別のバージョンへのデータベースの更新。 – Justin808

+1

@ Justin808:動的SQLまたはGOなしではありません。これは、SQL Serverが実行計画を作成する方法であり、実行計画の基本となります。手続き的/行単位ではありません。 – gbn

+0

あなたのソリューションは、私が投稿したものよりも優れています。 – Lamak

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;