我的数据库中有一个表 A_tbl
. 我在 A_tbl
上创建了一个触发器来捕获插入的记录 . 触发器在队列表 B_tbl
中插入记录 . 此表具有 Identity
列,其属性"Not for replication"为1 .
-
A_tbl
(Id,name,value),其中Id
为主键 -
B_tbl
(uniqueId,Id),uniqueId
为Identity
列
执行此操作的触发器代码:
Insert into B_tbl (Id)
select i.Id from inserted
现在我的表'B'被复制到另一个数据库服务器,现在当我插入表'A'时,它导致了这个错误:
当IDENTITY_INSERT设置为ON或复制用户插入NOT FOR REPLICATION标识列时,必须为表'B_tbl'中的标识列指定显式值 . (来源:MSSQLServer,错误号:545)
请帮我解决这个问题 .
3 回答
你必须做这样的事情
触发器代码应包含Identity insert ON选项,如下所示
在没有错误的情况下INSERT记录基本上有两种不同的方法:
1)当IDENTITY_INSERT设置为OFF时 . PRIMARY KEY "ID" MUST NOT BE PRESENT
2)当IDENTITY_INSERT设置为ON时 . PRIMARY KEY "ID" MUST BE PRESENT
根据使用IDENTITY PRIMARY KEY创建的同一个表中的以下示例:
1)在第一个示例中,您可以在IDENTITY_INSERT为OFF时将新记录插入表中而不会出现错误 . 来自"INSERT INTO"语句 and a unique ID value will be added automatically: 的PRIMARY KEY "ID" MUST NOT BE PRESENT . 如果在这种情况下INSERT中存在ID,您将收到错误"Cannot insert explicit value for identify column in table..."
OUTPUT of TABLE [dbo].[Persons] will be:
2)在第二个示例中,当IDENTITY_INSERT为ON时,您可以在表中插入新记录而不会出现错误 . 来自"INSERT INTO"语句的PRIMARY KEY "ID" MUST BE PRESENT as long as the ID value does not already exist :如果在这种情况下INSERT中不存在ID,则会出现错误"Explicit value must be specified for identity column table..."
OUTPUT of TABLE [dbo].[Persons] will be: