我想将数据从数据库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。
答案 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
插入之前。