尝试将数据插入表时IDENTITY_INSERT错误

时间:2013-11-20 05:53:52

标签: sql sql-server

我想将数据从数据库TD_EDD中名为ActionType的表复制到另一个数据库DsVelocity中的另一个名为ActionType的表中。

我写了以下查询:

INSERT INTO [DsVelocity].[dbo].[ActionType]
       ([ActionTypeID]
       ,[ActionTypeName]
       ,[ActiveStatus])
SELECT [ActionTypeID], [ActionType], [Active/Deactive]
FROM [TD_EDD].[dbo].[ActionType]
GO 

每当我尝试这样做时,我都会收到以下错误:

Msg 544, Level 16, State 1, Line 1
Cannot insert explicit value for identity column in table 'ActionType' when IDENTITY_INSERT is set to OFF.

我不明白什么是错的,为什么我会收到这个错误?

请注意,我使用的是Microsoft SQL Server 2008 R2。

2 个答案:

答案 0 :(得分:1)

这意味着当您将数据插入目标表时,您将遇到冲突的ID。很可能是ActionTypeId列

修复它使用

INSERT INTO [DsVelocity].[dbo].[ActionType]
       ([ActionTypeName]
       ,[ActiveStatus])
SELECT [ActionType], [Active/Deactive]
FROM [TD_EDD].[dbo].[ActionType]
GO 

答案 1 :(得分:0)

好吧,我们假设消息中ActionTypeID是IDENTITY Column。您不能将isert值放入此列中,因为它是自动生成的,无论您使用IDENTITY_INSERT

  

允许将显式值插入到a的标识列中   表

     

任何时候,会话中只有一个表可以拥有IDENTITY_INSERT   属性设置为ON。如果表已将此属性设置为ON,   并为另一个表发出SET IDENTITY_INSERT ON语句,   SQL Server返回一条错误消息,指出SET IDENTITY_INSERT为   已经打开并报告为其设置为ON的表。

     

如果插入的值大于当前的标识值   在表中,SQL Server自动使用新插入的值作为   目前的身份价值。

     

SET IDENTITY_INSERT的设置在执行或运行时设置   不是在解析时间。

所以你必须做类似

的事情
SET IDENTITY_INSERT [DsVelocity].[dbo].[ActionType] ON

插入之前。