我的数据库中有一个表A_tbl。我在A_tbl上创建了一个触发器来捕获插入的记录。触发器正在我的队列表B_tbl中插入记录。此表有一个Identity列,属性为“NotforReplication1”。
A_tbl (Id、名称、值),以Id为主键B_tbl (uniqueId,Id),以uniqueId作为Identity列执行此操作的触发器代码:
Insert into B_tbl (Id)
    select i.Id from inserted现在,我的表'B‘被复制到另一个DB Server,现在当我插入表'A’时,它会导致以下错误:
必须为表“B_tbl”中的标识列指定显式值,无论是在将IDENTITY_INSERT设置为ON时还是当复制用户插入非复制标识列时。(来源: MSSQLServer,错误号: 545)
请帮我解决这个问题。
发布于 2018-03-14 19:59:33
基本上有两种不同的方法可以插入记录而不出现错误:
1)当IDENTITY_INSERT被触发时。主键"ID“必须不存在
( 2)设置IDENTITY_INSERT的时间。主键"ID“必须显示为
如下所示,来自使用标识主键创建的同一表:
CREATE TABLE [dbo].[Persons] (    
    ID INT IDENTITY(1,1) PRIMARY KEY,
    LastName VARCHAR(40) NOT NULL,
    FirstName VARCHAR(40)
);1)在第一个示例中,您可以在表中插入新记录,而不会在IDENTITY_INSERT关闭时出现错误。主键" 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.Persons的dbo.Persons输出为:
ID    LastName   FirstName
1     DOE        Jane
2     BROWN      JOE2)在第二个示例中,您可以在打开IDENTITY_INSERT时将新记录插入到表中,而不会出现错误。只要ID值不存在,主键" ID“必须是来自"INSERT INTO”语句的:如果在本例中该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.Persons的dbo.Persons输出为:
ID    LastName   FirstName
1     DOE        Jane
2     BROWN      JOE
3     BLACK      JACK
5     WHITE      JOHN发布于 2016-03-17 04:43:23
你必须做这样的事
SET IDENTITY_INSERT A_tbl  ON
Insert into B_tbl (uniqueid, Id)
select 1, i.id from inserted
SET IDENTITY_INSERT A_tbl  OFF发布于 2016-03-17 05:12:25
触发器代码应包含标识插入选项,如下所示
SET IDENTITY_INSERT B_tbl ON
Insert into B_tbl (uniqueid,Id)
select identityvalue,i.Id from inserted
SET IDENTITY_INSERT B_tbl OFFhttps://stackoverflow.com/questions/36051593
复制相似问题