为什么即使在显式设置 IDENTITY_INSERT ON 并使用列列表后,我仍会收到身份插入错误?

J.D*_*.D. 2 sql-server insert sql-server-2008-r2 identity table

我的代码:

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
Run Code Online (Sandbox Code Playgroud)

错误:

消息 8101,级别 16,状态 1,第 4 行

表 'SomeCoolDatabase.BoringOldSchema.TableWithIdentityColumn' 中标识列的显式值只能在使用列列表且 IDENTITY_INSERT 为 ON 时指定。

是什么赋予了?

小智 7

将列列表添加到您的代码中:

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
Run Code Online (Sandbox Code Playgroud)

基本上,列列表是当您明确说明要插入的列时。

请记住,当您设置时IDENTITY_INSERT ON,您必须在插入语句中指定作为标识的列的值(在您的情况下为 column ColumnWithIdentity)。如果IDENTITY_INSERT OFF,SQL Server将标识列的第一个自由价值,所以你不能添加ColumnWithIdentity在该领域SELECT的一部分INSERT