sql—插入查询中的增量非主键字段

093gszye  于 2021-08-01  发布在  Java
关注(0)|答案(2)|浏览(251)

我想把旧公司的行复制到新公司。

SET IDENTITY_INSERT [SomeDB].[dbo].[SomeTable] ON;

INSERT INTO [SomeDB].[dbo].[SomeTable] 
       ([HRCo]
      ,[Code]
      ,[Type]
      ,[Description]
      ,[SafetyYN]
      ,[Notes]
      ,[UniqueAttchID]
      ,[CertPeriod]   
      ,[KeyID]
      ,[PTOTypeYN]
      ,[PRLeaveCode]) 
SELECT '6',
       SomeTable.Code
      ,SomeTable.Type
      ,SomeTable.Description
      ,SomeTable.SafetyYN
      ,SomeTable.Notes
      ,SomeTable.UniqueAttchID
      ,SomeTable.CertPeriod    
      ,[KeyID]      
      ,SomeTable.PTOTypeYN
      ,SomeTable.PRLeaveCode
      FROM [SomeDB].[dbo].[SomeTable] 
WHERE HRCo = '11'

SET IDENTITY_INSERT [SomeDB].[dbo].[SomeTable] OFF;

我得到的结果是一个错误:
无法在具有唯一索引“bikeyid”的对象“dbo.sometable”中插入重复的键行。重复的键值是(1377)。
有没有一种方法可以对这个列使用increment(它不是一个主键列)或者可能有另一种方法来复制多个记录?

9bfwbjaz

9bfwbjaz1#

你在评论里说主键是开的 ([HRCo], [Code], [Type]) 以及 IDENTITYKeyID . 这个信息应该在问题中。这对于理解正在发生的事情很重要。
您正在设置 HRCo6 对于您的副本,我假设这保证了新的主键是唯一的。
至于 KeyID ,的 IDENTITY 列将在过程中自动获取其(新的、递增的)值 INSERT ,因此不应将此列包含在 INSERT 声明。这是什么 IDENTITY 做。 IDENTITY 自动为新行指定新的顺序值。你不应该 SET IDENTITY_INSERT 在这里。让 IDENTITY 做它能做的。

INSERT INTO [SomeDB].[dbo].[SomeTable] 
       ([HRCo]
      ,[Code]
      ,[Type]
      ,[Description]
      ,[SafetyYN]
      ,[Notes]
      ,[UniqueAttchID]
      ,[CertPeriod]   
      --,[KeyID]
      ,[PTOTypeYN]
      ,[PRLeaveCode]) 
SELECT '6',
       SomeTable.Code
      ,SomeTable.Type
      ,SomeTable.Description
      ,SomeTable.SafetyYN
      ,SomeTable.Notes
      ,SomeTable.UniqueAttchID
      ,SomeTable.CertPeriod    
      --,[KeyID]      
      ,SomeTable.PTOTypeYN
      ,SomeTable.PRLeaveCode
FROM [SomeDB].[dbo].[SomeTable] 
WHERE HRCo = '11'

注意,我删除了 KeyID 两列中的列 INSERT 以及 SELECT 声明。

xe55xuns

xe55xuns2#

如果您正在使用

SET IDENTITY_INSERT [SomeDB].[dbo].[SomeTable] ON;

你不必设置pk值。例如,如果pk是keyid,则从insert中删除此列。
可能是这样的:

SET IDENTITY_INSERT [SomeDB].[dbo].[SomeTable] ON;

INSERT INTO [SomeDB].[dbo].[SomeTable] 
       ([HRCo]
      ,[Code]
      ,[Type]
      ,[Description]
      ,[SafetyYN]
      ,[Notes]
      ,[UniqueAttchID]
      ,[CertPeriod]   
      ,[PTOTypeYN]
      ,[PRLeaveCode]) 
SELECT '6',
       SomeTable.Code
      ,SomeTable.Type
      ,SomeTable.Description
      ,SomeTable.SafetyYN
      ,SomeTable.Notes
      ,SomeTable.UniqueAttchID
      ,SomeTable.CertPeriod     
      ,SomeTable.PTOTypeYN
      ,SomeTable.PRLeaveCode
      FROM [SomeDB].[dbo].[SomeTable] 
WHERE HRCo = '11'

相关问题