Sql server 违反主键约束-SQL Server
在我的SQL Server中,我创建了一个数据库,并尝试将下面列出的两个表中的值导出到我在数据库中创建的新表中 但我总是犯这个错误 违反主键约束“PK\u DM\u Locat\u BA8F50140E575579”。无法在对象“dbo.DM_位置”中插入重复键。重复的键值为(1) 我的代码:Sql server 违反主键约束-SQL Server,sql-server,function,parameters,primary-key,star-schema,Sql Server,Function,Parameters,Primary Key,Star Schema,在我的SQL Server中,我创建了一个数据库,并尝试将下面列出的两个表中的值导出到我在数据库中创建的新表中 但我总是犯这个错误 违反主键约束“PK\u DM\u Locat\u BA8F50140E575579”。无法在对象“dbo.DM_位置”中插入重复键。重复的键值为(1) 我的代码: INSERT INTO DM_Location (Authority_Id, FacilityAddress, FacilityPostcode) SELECT AuthorityId, Faci
INSERT INTO DM_Location (Authority_Id, FacilityAddress, FacilityPostcode)
SELECT AuthorityId, FacilityAddress, FacilityPostcode
FROM dbo.2015_2016
UNION
SELECT DISTINCT AuthorityId, FacilityAddress, FacilityPostcode
FROM dbo.2016_2017
任何帮助都将不胜感激!谢谢问题在于,您有两个表的
权限Id
值为1,但它们在设施地址
或设施PostCode
中的值不同。由于在表DM_Location
中有主键约束,因此会产生主键冲突错误
要解决此问题,可以删除主键约束:
ALTER TABLE DM_Location
DROP CONSTRAINT PK__DM_Locat__BA8F50140E575579;
当然,如果您想在表上保留主键,您必须处理产生的错误,但这实际上取决于您希望保留主键的原因。问题是,您有两个表的
Authority\u Id
值为1,但它们在FacilityAddress
或FacilityPostcode
中具有不同的值。由于在表DM_Location
中有主键约束,因此会产生主键冲突错误
要解决此问题,可以删除主键约束:
ALTER TABLE DM_Location
DROP CONSTRAINT PK__DM_Locat__BA8F50140E575579;
当然,如果您想在表上保留主键,您必须处理产生的错误,但这实际上取决于您希望保留主键的原因。看起来您的两个表有重复项。你必须排除他们。我可以猜测,最近的数据“更准确”,以下查询可能会起作用:
INSERT INTO DM_Location (Authority_Id, FacilityAddress, FacilityPostcode)
SELECT AuthorityId, FacilityAddress, FacilityPostcode
FROM dbo.2015_2016
WHERE AuthorityId NOT IN (SELECT AuthorityId FROM dbo.2016_2017)
UNION
SELECT AuthorityId, FacilityAddress, FacilityPostcode
FROM dbo.2016_2017
此外,为了确保目标表中没有这些记录,并且您不想截断它,您可以尝试以下操作:
INSERT INTO DM_Location (Authority_Id, FacilityAddress, FacilityPostcode)
SELECT AuthorityId, FacilityAddress, FacilityPostcode
FROM dbo.2015_2016
WHERE AuthorityId NOT IN (SELECT AuthorityId FROM dbo.2016_2017)
and AuthorityId NOT IN (SELECT AuthorityId FROM DM_Location)
UNION
SELECT AuthorityId, FacilityAddress, FacilityPostcode
FROM dbo.2016_2017
WHERE AuthorityId NOT IN (SELECT AuthorityId FROM DM_Location);
看起来您的两个表有重复项。你必须排除他们。我可以猜测,最近的数据“更准确”,以下查询可能会起作用:
INSERT INTO DM_Location (Authority_Id, FacilityAddress, FacilityPostcode)
SELECT AuthorityId, FacilityAddress, FacilityPostcode
FROM dbo.2015_2016
WHERE AuthorityId NOT IN (SELECT AuthorityId FROM dbo.2016_2017)
UNION
SELECT AuthorityId, FacilityAddress, FacilityPostcode
FROM dbo.2016_2017
此外,为了确保目标表中没有这些记录,并且您不想截断它,您可以尝试以下操作:
INSERT INTO DM_Location (Authority_Id, FacilityAddress, FacilityPostcode)
SELECT AuthorityId, FacilityAddress, FacilityPostcode
FROM dbo.2015_2016
WHERE AuthorityId NOT IN (SELECT AuthorityId FROM dbo.2016_2017)
and AuthorityId NOT IN (SELECT AuthorityId FROM DM_Location)
UNION
SELECT AuthorityId, FacilityAddress, FacilityPostcode
FROM dbo.2016_2017
WHERE AuthorityId NOT IN (SELECT AuthorityId FROM DM_Location);
另外-您的
选择。。。UNION
很奇怪-要使其正常工作,任何由UNION组合的部分必须返回相同数量的列-第一部分返回3列,第二部分返回4列…还有-您的选择。。。UNION
很奇怪-为了让它工作,任何由UNION组合的部分必须返回相同数量的列-第一部分返回3列,第二部分返回4列…感谢您的回复!这确实有帮助,我将两个表与数据结合起来,并设法将其中的值提取到新表中!谢谢你的帮助谢谢你的回复!这确实有帮助,我将两个表与数据结合起来,并设法将其中的值提取到新表中!谢谢你的帮助谢谢你的回复,我会试试的!谢谢你的回复,我会试试的!