我的数据库中有一个表A_tbl
。我在A_tbl
上创建了一个触发器来捕获插入的记录。触发器正在我的队列表B_tbl
中插入记录。此表有一个Identity
列,其属性“Not for replication”为1。
A_tbl
(ID,名称,值),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)
请帮我解决这个问题。
答案 0 :(得分:4)
你必须做这样的事情
SET IDENTITY_INSERT A_tbl ON
Insert into B_tbl (uniqueid, Id)
select 1, i.id from inserted
SET IDENTITY_INSERT A_tbl OFF
答案 1 :(得分:2)
触发器代码应包含Identity insert ON选项,如下所示
SET IDENTITY_INSERT B_tbl ON
Insert into B_tbl (uniqueid,Id)
select identityvalue,i.Id from inserted
SET IDENTITY_INSERT B_tbl OFF
答案 2 :(得分:2)
在没有错误的情况下,INSERT记录基本上有两种不同的方法:
1)当IDENTITY_INSERT设置为OFF时。 PRIMARY KEY " ID"绝不能存在
2)当IDENTITY_INSERT设置为ON时。 PRIMARY KEY " ID"必须存在
根据使用IDENTITY PRIMARY KEY创建的同一个表中的以下示例:
CREATE TABLE [dbo].[Persons] (
ID INT IDENTITY(1,1) PRIMARY KEY,
LastName VARCHAR(40) NOT NULL,
FirstName VARCHAR(40)
);
1)在第一个示例中,当IDENTITY_INSERT为OFF时,您可以在表中插入新记录而不会出现错误。 PRIMARY KEY " ID"绝不能出现来自" INSERT INTO"语句将自动添加唯一ID值。如果在这种情况下INSERT中存在ID,您将收到错误"无法为表中的标识列插入显式值..."
SET IDENTITY_INSERT [dbo].[Persons] OFF;
INSERT INTO [dbo].[Persons] (FirstName,LastName)
VALUES ('JANE','DOE');
INSERT INTO Persons (FirstName,LastName)
VALUES ('JOE','BROWN');
表[dbo]的输出。[人员]将是:
ID LastName FirstName
1 DOE Jane
2 BROWN JOE
2)在第二个示例中,您可以在IDENTITY_INSERT为ON时将新记录插入表中而不会出现错误。 PRIMARY KEY " ID"必须出现来自" INSERT INTO"语句只要ID值不存在:如果在这种情况下INSERT中不存在ID,则会得到错误"必须为标识列表指定显式值..."
SET IDENTITY_INSERT [dbo].[Persons] ON;
INSERT INTO [dbo].[Persons] (ID,FirstName,LastName)
VALUES (5,'JOHN','WHITE');
INSERT INTO [dbo].[Persons] (ID,FirstName,LastName)
VALUES (3,'JACK','BLACK');
表[dbo]的输出。[人员]将是:
ID LastName FirstName
1 DOE Jane
2 BROWN JOE
3 BLACK JACK
5 WHITE JOHN