2017-03-16 18 views
0

既存のデータを持つ表の列に値0を挿入しようとしています。 識別列は(1,1)です。値0を挿入するために既存のデータを削除する必要がありますか?ID列に値0を挿入してください。

SET IDENTITY_INSERT table ON 
INSERT INTO table (id,...) Values(0,.....) 
SET IDENTITY_INSERT table OFF 

私はこれを実行しようとしましたが、スクリプトがハングアップしています。

+2

スクリプト**がハングする**?のように、それは応答を返さずに "永遠に"実行されますか?もしそうなら、興味深い。そうでない場合は、代わりに*エラーメッセージ*を返す場合は、そのエラーメッセージ(すべてのテキストを含む)を記述する必要があります。 –

+1

ああ良い。 *問題のコードが一度も実行されていないことを明確にする編集。 [mcve]を作成してみてください –

+0

ID列に0を挿入しますか?どうして? – Andrew

答えて

0

identity_insertを使用する場合、挿入の列名を指定する必要があります。

create table t (id int not null identity(1,1), col varchar(32)); 
set identity_insert dbo.t on; 
insert into dbo.t (id,col) values(0,'test'); 
set identity_insert dbo.t off; 

rextesterデモ:http://rextester.com/VMT42836

戻り

+----+------+ 
| id | col | 
+----+------+ 
| 0 | test | 
+----+------+ 
+0

申し訳ありませんが、私も列名を指定します –

1

あなたがIDにPKまたは一意索引がある場合は、その後

create table #test (id int identity(1,1), val int) 

insert into #test (val) values (10),(11) 

set identity_insert #test on 

insert into #test (id, val) values (0,12) 

set identity_insert #test off 

に、この使用してセットIDENTITY_INSERTテーブルを行うことができますが、あなたは制約エラーを受けるでしょう

+0

質問のコードはidentity_insertをオンにしません。 *具体的には、この答えは質問のコードと区別するためのものですか? –

+0

良い点...ハングすると、実際のエラーを理解してエラーが発生する理由を理解する必要があります... –

0
create table #test (id int identity(0,1), val int) 
SET IDENTITY_INSERT #test ON 
INSERT INTO #test (id,val) Values(0,100) 
SET IDENTITY_INSERT #test OFF 
SELECT * FROM #test 
 
id   val 
----------- ----------- 
0   100 
関連する問題