Sql-Server

為什麼即使在明確設置 IDENTITY_INSERT ON 並使用列列表後,我仍會收到身份插入錯誤?

  • September 4, 2019

我的程式碼:

SET IDENTITY_INSERT SomeCoolDatabase.BoringOldSchema.TableWithIdentityColumn ON

INSERT INTO SomeCoolDatabase.BoringOldSchema.TableWithIdentityColumn
SELECT ColumnWithIdentity, OtherColumnWithoutIdentity, LastColumnInThisTable
FROM ALinkedServer.PrettyCoolDatabaseAsWell.StandardSchema.TableWithIdentityColumn

SET IDENTITY_INSERT SomeCoolDatabase.BoringOldSchema.TableWithIdentityColumn OFF

錯誤:

消息 8101,第 16 層,狀態 1,第 4 行

只有在使用列列表並且 IDENTITY_INSERT 為 ON 時,才能指定表“SomeCoolDatabase.BoringOldSchema.TableWithIdentityColumn”中標識列的顯式值。

是什麼賦予了?

將列列表添加到您的程式碼中:

SET IDENTITY_INSERT SomeCoolDatabase.BoringOldSchema.TableWithIdentityColumn ON

INSERT INTO SomeCoolDatabase.BoringOldSchema.TableWithIdentityColumn 
   (ColumnWithIdentity, OtherColumnWithoutIdentity, LastColumnInThisTable)
SELECT ColumnWithIdentity, OtherColumnWithoutIdentity, LastColumnInThisTable
FROM ALinkedServer.PrettyCoolDatabaseAsWell.StandardSchema.TableWithIdentityColumn

SET IDENTITY_INSERT SomeCoolDatabase.BoringOldSchema.TableWithIdentityColumn OFF

GO

基本上,列列表是當您明確說明要插入的列時。

請記住,當您設置時IDENTITY_INSERT ON,您必須在插入語句中指定作為標識的列的值(在您的情況下為 column ColumnWithIdentity)。如果,SQL Server 為標識列設置第一個空閒值,因此您IDENTITY_INSERT OFF不能ColumnWithIdentity在.SELECT``INSERT

引用自:https://dba.stackexchange.com/questions/237332