sql - 在 INSERT 查询中增加非主键字段
问题描述
我正在尝试将行从旧公司复制到新公司。
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)。
有没有办法为此列使用增量?(它不是主键列)或者可能有另一种方法来复制多条记录?
解决方案
你在评论中说主键是 on([HRCo], [Code], [Type])
并且IDENTITY
is KeyID
。这些信息应该在问题中。了解正在发生的事情很重要。
您正在为您的副本设置HRCo
to 6
,所以我假设这可以保证新的主键是唯一的。
至于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'
请注意,我从and语句中删除了该KeyID
列。INSERT
SELECT
推荐阅读
- java - 如何在 Android 中通过网络套接字 (Socket.IO) 发送照片、视频和其他文件?
- snowflake-cloud-data-platform - Snowflake pipe_usage_history:关于信用和成本的问题
- c# - VS2017 Directory.Build.props 不加载整个解决方案
- c# - 从数据库计算时间
- swift - 如何在计数器中有一个日期变量更新年份
- java - 如何在 executorCompletionService 中使用 concurrentHashMap?
- loops - 使用循环将代理类型设置为空闲,当处于该状态时将接受代理,如果忙则拒绝
- javascript - Bootstrap 3 工具提示箭头无法正确显示多行消息
- python - Matplotlib;使用不同的轴标签制作不同的子图
- postgresql - 如何在休眠的 nativeQuery 中投射空日期?