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

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

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

  1. SET IDENTITY_INSERT [SomeDB].[dbo].[SomeTable] ON;
  2. INSERT INTO [SomeDB].[dbo].[SomeTable]
  3. ([HRCo]
  4. ,[Code]
  5. ,[Type]
  6. ,[Description]
  7. ,[SafetyYN]
  8. ,[Notes]
  9. ,[UniqueAttchID]
  10. ,[CertPeriod]
  11. ,[KeyID]
  12. ,[PTOTypeYN]
  13. ,[PRLeaveCode])
  14. SELECT '6',
  15. SomeTable.Code
  16. ,SomeTable.Type
  17. ,SomeTable.Description
  18. ,SomeTable.SafetyYN
  19. ,SomeTable.Notes
  20. ,SomeTable.UniqueAttchID
  21. ,SomeTable.CertPeriod
  22. ,[KeyID]
  23. ,SomeTable.PTOTypeYN
  24. ,SomeTable.PRLeaveCode
  25. FROM [SomeDB].[dbo].[SomeTable]
  26. WHERE HRCo = '11'
  27. 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 做它能做的。

  1. INSERT INTO [SomeDB].[dbo].[SomeTable]
  2. ([HRCo]
  3. ,[Code]
  4. ,[Type]
  5. ,[Description]
  6. ,[SafetyYN]
  7. ,[Notes]
  8. ,[UniqueAttchID]
  9. ,[CertPeriod]
  10. --,[KeyID]
  11. ,[PTOTypeYN]
  12. ,[PRLeaveCode])
  13. SELECT '6',
  14. SomeTable.Code
  15. ,SomeTable.Type
  16. ,SomeTable.Description
  17. ,SomeTable.SafetyYN
  18. ,SomeTable.Notes
  19. ,SomeTable.UniqueAttchID
  20. ,SomeTable.CertPeriod
  21. --,[KeyID]
  22. ,SomeTable.PTOTypeYN
  23. ,SomeTable.PRLeaveCode
  24. FROM [SomeDB].[dbo].[SomeTable]
  25. WHERE HRCo = '11'

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

展开查看全部
xe55xuns

xe55xuns2#

如果您正在使用

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

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

  1. SET IDENTITY_INSERT [SomeDB].[dbo].[SomeTable] ON;
  2. INSERT INTO [SomeDB].[dbo].[SomeTable]
  3. ([HRCo]
  4. ,[Code]
  5. ,[Type]
  6. ,[Description]
  7. ,[SafetyYN]
  8. ,[Notes]
  9. ,[UniqueAttchID]
  10. ,[CertPeriod]
  11. ,[PTOTypeYN]
  12. ,[PRLeaveCode])
  13. SELECT '6',
  14. SomeTable.Code
  15. ,SomeTable.Type
  16. ,SomeTable.Description
  17. ,SomeTable.SafetyYN
  18. ,SomeTable.Notes
  19. ,SomeTable.UniqueAttchID
  20. ,SomeTable.CertPeriod
  21. ,SomeTable.PTOTypeYN
  22. ,SomeTable.PRLeaveCode
  23. FROM [SomeDB].[dbo].[SomeTable]
  24. WHERE HRCo = '11'
展开查看全部

相关问题