2012-01-13 16 views
4

に自動インクリメントすることは、私が何をしようとしているのですIDフィールド。私は、行を挿入しようとすると、しかし、私はこれを取得:SQL Serverが生成されたテーブルここ

Table 'new_table ' does not have the identity property. Cannot perform SET operation. 

誰も私が間違ってやっているか、どのように私は実際にこれについて行くすべきかに関して、私を啓発することができますか?

+1

'new_table'の' ID'フィールドを 'IDENTITY'と定義しましたか? http://msdn.microsoft.com/en-us/library/ms186775.aspx – Oded

答えて

7

作成するテーブルには、ID列がありません。投稿したコードを調べると、宣言された身元がどこにもないことがわかります。 PRIMARY KEYIDENTITYのコンセプトを混乱させていると思います。彼らは明確で無関係です。 SELECT ... INTO ...

+0

'SELECT ... INTO'で作成できない場合は、別のテーブルの列に基づいてテーブルを作成する別の方法がありますか? – Karl

+0

あなたはいつも 'CREATE TABLE ...'を使うことができます(そして、そうしなければなりません)。そして、厳密で正確なスキーマを制御できます。 IDENTITYはあなたが遭遇する多くの問題のちょうど* 1 *です。レコードの場合、*ラウンドアバウトの方法があります: 'SELECT field1、field2、... INTO ... FROM ... WHERE 0 = 1'は行を持たず、' ID'カラムを持たないテーブルを作成します。その後、 'ID'カラムをIDとして追加し、' INSERT ... SELECT'を使用してデータを転送します。 –

+2

@RemusRusanu - あなたはSELECT IDENTITY(INT、1,1)を行うことができます。id、foo、bar INTO new_table FROM old_table WHERE 1 = 2; ' –

2

"identity(1,1)"オプションで列を指定する必要があります。最初の1が始点、2番目が増分です。

2

set identity_insert onを使用してID列を持つテーブルを作成することは、実際にはあなたが思っていることをしません。オートインクリメント(一時的に)を無効にして、そこで値をハードコードすることができます。ここで

がその詳細です... http://msdn.microsoft.com/en-us/library/aa259221(v=sql.80).aspx

0

ここで問題になることができます

ALTER TABLE new_table ADD CONSTRAINT pk_new_table_id PRIMARY KEY(id, idColumn); 

id列を指定します。

1

まず、「select ... into」を使用せずに新しいテーブルを作成し、列をID列として指定する必要があります。

データをコピーする前に、 "set identity_insert .. on"を使用してください。その後、「set identity_insert ... off」を実行します。

最初の部分でカンニングしたい場合は、管理スタジオを使用できます。元のテーブルを右クリックして、デザイナーに行ってください。目的の列のIDオプションを追加します。その後、スクリプトを保存しますがコミットしないでください。新しいテーブルを作成するために新しく生成されたスクリプトを操作したいかもしれません。これを繰り返し行う必要がある場合は、他の洗練されたソリューションがあります。しかし、これははるかに簡単です。

関連する問題