SQL Server(私の場合、2005)では、T-SQLを使用して既存のテーブル列にIDプロパティを追加するにはどうすればよいですか?
何かのようなもの:
alter table tblFoo
alter column bar identity(1,1)
私はあなたがそうすることができるとは信じていません。最善の策は、新しいID列を作成し、ID挿入コマンドを使用してデータをコピーすることです(実際に古い値を保持する場合)。
プロセスの詳細を説明するまともな記事を次に示します。 http://www.mssqltips.com/tip.asp?tip=1397
Vikashが投稿したソリューションは機能しません。 SQL Management Studioで「不正な構文」エラーを生成します(OPとして指定されている2005)。 SQL Serverの "Compact Edition"がこの種の操作をサポートしているという事実は、実際のプロセスがRobert JohnFXが言ったことに似ているためです。
IDである必要があるフィールドに既に存在する値を保持したい場合は、次のようなことができます。
CREATE TABLE tname2 (etc.)
INSERT INTO tname2 FROM tname1
DROP TABLE tname1
CREATE TABLE tname1 (with IDENTITY specified)
SET IDENTITY_INSERT tname1 ON
INSERT INTO tname1 FROM tname2
SET IDENTITY_INSERT tname1 OFF
DROP tname2
もちろん、live codeで使用されるテーブル(tname1)を削除して再作成することはお勧めしません! :)
テーブルは読み込まれていますか?削除しない場合、テーブルを再作成します。
列に既に存在している値が入力されている場合は?それらが保持したくない値である場合。
必要に応じて新しいテーブルを作成し、古いテーブルから新しいテーブルにレコードをロードして、データベースに通常どおりID列を入力させます。元のテーブルの名前を変更し、新しいテーブルの名前を正しい名前に変更します:)。
最後に、IDを作成したい列に現在主キー値が含まれており、他のテーブルで既に参照されている場合、これがあなたがしたいことだと確信している場合は完全に再考する必要があります:)
これを行う直接的な方法はありません:
A)SQL を介して、つまり:
-- make sure you have the correct CREATE TABLE script ready with IDENTITY
SELECT * INTO abcTable_copy FROM abcTable
DROP TABLE abcTable
CREATE TABLE abcTable -- this time with the IDENTITY column
SET IDENTITY_INSERT abcTable ON
INSERT INTO abcTable (..specify all columns!) FROM (..specify all columns!) abcTable_copy
SET INDENTITY_INSERT abcTable OFF
DROP TABLE abcTable_copy
-- I would suggest to verify the contents of both tables
-- before dropping the copy table
B)MSSMS を介して、バックグラウンドでまったく同じことを行いますが、太りすぎはしません。
これにより、元のデータがすべて含まれるテーブルが削除され、再作成されます。警告が表示された場合:
MSSMS Tools-> Options-> Designers-> Table and database Designers に移動し、オプションのチェックを外します」テーブルの再作成」
注意すべき事項:
新しいテーブルを作成する
SELECT * INTO Table_New FROM Table_Current WHERE 1 = 0;
新しいテーブルから列を削除
Alter table Table_New drop column id;
IDを含む列を追加する
Alter table Table_New add id int primary key identity;
新しいテーブルのすべてのデータを取得する
SET IDENTITY_INSERT Table_New ON;
INSERT INTO Table_New (id, Name,CreatedDate,Modified)
SELECT id, Name,CreatedDate,Modified FROM Table_Current;
SET IDENTITY_INSERT Table_New OFF;
古いテーブルを削除
drop table Table_Current;
新しいテーブルの名前を古いテーブルに変更します
EXEC sp_rename 'Table_New', 'Table_Current';