在SQL Server中克隆/复制记录,并自动增加ID

在SQL Server中克隆/复制记录,并自动增加ID,sql,sql-server,Sql,Sql Server,我想复制注册表id=1的所有行,并且克隆行的id应自动递增 当我执行 insert into [ZAC2].[dbo].[rubrics] ([reference] ,[name_de] ,[name_fr] ,[name_en] ,[name_es] ,[registry_id] ,[registry_type] ,[parent_id] ,[created_at] ,[updated_at] ,[creator_id] ,[updater_i

我想复制注册表id=1的所有行,并且克隆行的id应自动递增

当我执行

insert into [ZAC2].[dbo].[rubrics] 
  ([reference]
  ,[name_de]
  ,[name_fr]
  ,[name_en]
  ,[name_es]
  ,[registry_id]
  ,[registry_type]
  ,[parent_id]
  ,[created_at]
  ,[updated_at]
  ,[creator_id]
  ,[updater_id]
  ,[level]
  ,[inherited_rating]
  ,[has_children])
select ([reference]
  ,[name_de]
  ,[name_fr]
  ,[name_en]
  ,[name_es]
  ,[registry_id]
  ,[registry_type]
  ,[parent_id]
  ,[created_at]
  ,[updated_at]
  ,[creator_id]
  ,[updater_id]
  ,[level]
  ,[inherited_rating]
  ,[has_children]
FROM [ZAC2].[dbo].[rubrics] 
  where registry_id=1
我收到错误消息:

无法在具有唯一索引“idx\u rubrics\u reference\u registry”的对象“dbo.rubrics”中插入重复的键行。重复的键值是(0,1,RegistryPlan)

使用
脚本键as>Create To>New Query Editor窗口
I获取:

ALTER TABLE [dbo].[rubrics] 
ADD PRIMARY KEY CLUSTERED ([id] ASC)
    WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, 
          IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, 
          ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 80
) ON [PRIMARY]
(<reference, varchar(255),>
           ,<rating, varchar(1),>
           ,<name_de, varchar(255),>
           ,<name_fr, varchar(255),>
           ,<name_en, varchar(255),>
           ,<name_es, varchar(255),>
           ,<registry_id, int,>
           ,<registry_type, varchar(255),>
           ,<parent_id, int,>
           ,<created_at, datetime,>
           ,<updated_at, datetime,>
           ,<creator_id, int,>
           ,<updater_id, int,>
           ,<level, int,>
           ,<inherited_rating, varchar(1),>
           ,<has_children, bit,>)
使用
scripttable as>Insert To>newquery Editor窗口
I获取:

ALTER TABLE [dbo].[rubrics] 
ADD PRIMARY KEY CLUSTERED ([id] ASC)
    WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, 
          IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, 
          ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 80
) ON [PRIMARY]
(<reference, varchar(255),>
           ,<rating, varchar(1),>
           ,<name_de, varchar(255),>
           ,<name_fr, varchar(255),>
           ,<name_en, varchar(255),>
           ,<name_es, varchar(255),>
           ,<registry_id, int,>
           ,<registry_type, varchar(255),>
           ,<parent_id, int,>
           ,<created_at, datetime,>
           ,<updated_at, datetime,>
           ,<creator_id, int,>
           ,<updater_id, int,>
           ,<level, int,>
           ,<inherited_rating, varchar(1),>
           ,<has_children, bit,>)
(
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,)

@marc\s您完全正确,我没有正确阅读错误消息。idx_rubrics_reference_注册表具有唯一约束,因此无法复制行。我更改了它(事实上,我的insert方法带有引用注册表的另一个id),现在它可以工作了。非常感谢

复合键中的字段是什么?它们是什么字段类型?智力?瓦查尔?自动增量?不为null?我在我的原始帖子中粘贴了一些来自SQLServerManagementStudio的输出。如何获取ID字段类型?名为
idx\u rubrics\u reference\u registry
的唯一索引的定义是什么?这是导致错误的原因-而不是您正在显示的PK。。。。显然,使用您的
INSERT。。选择…
statement,您正在生成违反此唯一约束的新行-您需要修复此问题!多么糟糕的一张桌子啊。@kermit,你会怎么设计那张桌子?