10
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;

我怎样才能实现这个功能?

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

当它被替换时.. Msg 8101, Level 16, State 1, Line 7 只有在使用列列表并且 IDENTITY_INSERT 为 ON 时,才能为表“TestTable”中的标识列指定显式值。

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

2 回答 2

10

你需要说

INSERT INTO TestTable (id, name)
Select * from  
( 
Select 55 as a,'data55' as b 
Union 
Select 56 as a,'data55' as b 
)n 
于 2012-10-02T10:23:43.307 回答
8

这应该可以正常工作:

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 ON中列出的字段进行设置。INSERT

于 2012-10-02T10:24:20.937 回答