2017-05-30 68 views
1

您能否请帮助。SQL IDENTITY INSERT问题

我运行下面的查询:

set identity_insert sites_dynamic ON 

insert into sites_dynamic 
    select * 
    from gpbatt_archive.dbo.sites_dynamic 
    where site_serial_number = 49955 

set identity_insert sites_dynamic OFF 

set identity_insert sites_static ON 

insert into sites_static 
    select * 
    from gpbatt_archive.dbo.sites_static 
    where static_site_id in (select static_site_id 
          from gpbatt_archive.dbo.sites_dynamic 
          where site_serial_number = 49955) 

set identity_insert sites_static OFF 

返回错误是:

消息8101,级别16,状态1,行3
在表中标识列的显式值'sites_dynamic'只能在使用列列表且IDENTITY_INSERT为ON时指定。

任何人都可以帮助我吗?我是新手

+5

可能的重复[只有在使用列列表且IDENTITY \ _INSERT为ON SQL Server时,才能指定表中标识列的显式值(https://stackoverflow.com/questions/2005437/an-显式值为标识列在表中只能指定-a) –

回答

4

使用set identity_insert <tablename> on时,您的插入语句必须包含列列表。

这里是做正确的方法:

set identity_insert targetTable on 

insert into targetTable (col1, col2 [, coln]) 
select col1, col2 [, coln] 
from sourceTable 

set identity_insert targetTable off 

正如评论说Nick.McDermaid - 这是最好的做法是始终包括列清单。

+1

我可以补充:你应该_always_包括列列表无论! –

+0

@ Nick.McDermaid你是完全正确的。编辑到我的答案。 –