web-dev-qa-db-ja.com

SQL Serverの既存の列にIDプロパティを追加する方法

SQL Server(私の場合、2005)では、T-SQLを使用して既存のテーブル列にIDプロパティを追加するにはどうすればよいですか?

何かのようなもの:

alter table tblFoo 
    alter column bar identity(1,1)
35

私はあなたがそうすることができるとは信じていません。最善の策は、新しいID列を作成し、ID挿入コマンドを使用してデータをコピーすることです(実際に古い値を保持する場合)。

プロセスの詳細を説明するまともな記事を次に示します。 http://www.mssqltips.com/tip.asp?tip=1397

31
JohnFx

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)を削除して再作成することはお勧めしません! :)

12
NateJ

テーブルは読み込まれていますか?削除しない場合、テーブルを再作成します。

列に既に存在している値が入力されている場合は?それらが保持したくない値である場合。

必要に応じて新しいテーブルを作成し、古いテーブルから新しいテーブルにレコードをロードして、データベースに通常どおりID列を入力させます。元のテーブルの名前を変更し、新しいテーブルの名前を正しい名前に変更します:)。

最後に、IDを作成したい列に現在主キー値が含まれており、他のテーブルで既に参照されている場合、これがあなたがしたいことだと確信している場合は完全に再考する必要があります:)

2
Robert

これを行う直接的な方法はありません:

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オブジェクトエクスプローラーで、変更する必要があるテーブルを右クリックします。
  • 「デザイン」を選択しますIDENTITYを追加する列を選択します
  • IDの設定をNO-> YES(シードの可能性あり)から変更します
  • Ctr + Sテーブル

enter image description here

これにより、元のデータがすべて含まれるテーブルが削除され、再作成されます。警告が表示された場合:

enter image description here

MSSMS Tools-> Options-> Designers-> Table and database Designers に移動し、オプションのチェックを外します」テーブルの再作成」

注意すべき事項:

  1. これを行う前に、データベースに十分なディスク容量があります
  2. dBは使用されていません(特に変更するテーブル)
  3. 実行する前に必ずデータベースをバックアップしてください
  4. テーブルに大量のデータ(1Gを超える)がある場合、実際のDBで使用する前に他の場所で試してください
0
Milan
  1. 新しいテーブルを作成する

    SELECT * INTO Table_New FROM Table_Current WHERE 1 = 0;
    
  2. 新しいテーブルから列を削除

    Alter table Table_New drop column id;
    
  3. IDを含む列を追加する

    Alter table Table_New add id int primary key identity; 
    
  4. 新しいテーブルのすべてのデータを取得する

    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;
    
  5. 古いテーブルを削除

    drop table Table_Current;
    
  6. 新しいテーブルの名前を古いテーブルに変更します

    EXEC sp_rename 'Table_New', 'Table_Current';
    
0
Anuj Kumar