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

我如何实现此功能?用Identity_Insert插入数据是ON并插入到Table1中从表2中选择*

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

当这种被替换然后.. 消息8101,级别16,状态1,行7 当使用列列表只能指定表“TestTable的”标识列的显式值和IDENTITY_INSERT已打开。

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

再次阅读错误消息:“...只能在使用列列表**和** IDENTITY_INSERT为ON时指定。”。在你的联合示例中,你不提供列列表。 –

回答

8

你需要说

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

其工作正常,但我的要求是INSERT INTO TestTable 选择* from ... –

+5

我的要求是法拉利和该国的豪宅。这并不影响语言的规则。 – podiluska

+0

我犯了一个基本的错误,并多次忽略它:( –

5

这应该正常工作:

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; 

刚刚成立SET IDENTITY_INSERT ONINSERT子句中列出的字段。

相关问题