2012-10-02 23 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; 

Làm cách nào tôi có thể đạt được chức năng này?Chèn Dữ liệu với Identity_Insert là BẬT với Chèn vào Bảng1 Chọn * từ Bảng2

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

Khi điều này được thay thế sau đó .. Msg 8101, Level 16, State 1, Line 7 Một giá trị rõ ràng cho cột sắc trong bảng 'testtable' chỉ có thể được xác định khi một danh sách cột được sử dụng và IDENTITY_INSERT đang BẬT.

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

Đọc lại thông báo lỗi: "... chỉ có thể được chỉ định khi danh sách cột được sử dụng ** và ** IDENTITY_INSERT đang BẬT". Trong ví dụ công đoàn của bạn, bạn không cung cấp danh sách cột. –

Trả lời

8

Bạn cần phải nói

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

Làm việc tốt nhưng yêu cầu của tôi là INSERT INTO TestTable Chọn * từ ... –

+5

Yêu cầu của tôi là một chiếc Ferrari và một biệt thự ở trong nước. Điều đó không ảnh hưởng đến các quy tắc của ngôn ngữ. – podiluska

+0

Tôi đã phạm một sai lầm cơ bản và bỏ qua nó nhiều lần: ( –

5

này nên làm việc đúng cách:

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; 

Chỉ cần thiết lập SET IDENTITY_INSERT ON với các lĩnh vực được liệt kê trong mệnh đề INSERT.