2012-10-02 16 views
6
CREATE TABLE TestTable (id int IDENTITY (1,1), name nvarchar(100)); 
INSERT INTO TestTable(name) VALUES ('data1');      
INSERT INTO TestTable(name) VALUES ('data2');      
Declare @Identity as int 
set @identity=IDENT_CURRENT ('TestTable') 
SET IDENTITY_INSERT TestTable ON; 

den Tablo1 seç * içine Ekle ile ON? Bu daha sonra değiştirilirIDENTITY_INSERT ile ekleme Veri ben bu işlevselliği elde edebilirsiniz nasıl Table2

INSERT INTO TestTable 
Select * from 
(
Select 55 as a,'data55' as b 
Union 
Select 56 as a,'data55' as b 
)n 

.. Msg 8101, Düzey 16, State 1, satır 7 bir sütun listesi kullanıldığında tabloya 'TestTable' kimlik sütunu için bir açık değer sadece belirtilebilir ve IDENTITY_INSERT AÇIK.

INSERT INTO TestTable (id, name) VALUES (55, 'data55');  
INSERT INTO TestTable (id, name) VALUES (56, 'data55');  

SET IDENTITY_INSERT TestTable OFF; 
DBCC CHECKIDENT (TestTable, reseed,@identity) 
INSERT INTO TestTable(name) VALUES ('data3');     
Select * from TestTable 
Drop table TestTable 
+4

tekrar hata mesajı okuyun. Sendika örneğinizde, bir sütun listesi sağlamıyorsunuz. dan ... –

cevap

8

Bu düzgün çalışması gerekir

INSERT INTO TestTable (id, name) 
Select * from 
( 
Select 55 as a,'data55' as b 
Union 
Select 56 as a,'data55' as b 
)n 
+1

Onun Ferrari ve ülkede bir konaktır. Bu, dilin kurallarını etkilemez. –

+5

Benim gereksinimi INSERT INTO SınamaTablo Seç * iyi çalışıyor ama benim gerekliliktir – podiluska

+0

Ben basit bir hata yaptı ve u bir Ferrari ve bir konak alıyoruz ..May :(defalarca –

5

söylemek gerekir:

SET IDENTITY_INSERT TestTable ON; 

INSERT INTO TestTable(id, name) 
Select * 
from 
( 
    Select 55 as a, 'data55' as b 
    Union 
    Select 56 as a, 'data55' as b 
)n; 

Sadece INSERT bendinde yer alan alanlarla SET IDENTITY_INSERT ON ayarlayın. "** Bir sütun listesi kullanıldığında yalnızca belirtilebilir ... ve ** ıdentıty_ınsert AÇIK.":