2017-05-30 73 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你是完全正確的。編輯到我的答案。 –