我已经查看了堆栈溢出中的其他线程,将数据从一个表复制到另一个表(但不复制重复数据)。但我一直在讨论这个问题。
我有表A和B。
表A有7列,第一列作为键索引。 表B有7列,第一列是它的关键索引。
以下代码对我不起作用:
INSERT INTO dbo.A SELECT DISTINCT * from dbo.B
WHERE NOT EXISTS (SELECT * from dbo.A
WHERE 'dbo.B.c1' = 'dbo.A.c1')
不幸的是,我得到了:
违反PRIMARY KEY约束'PK_A'。无法在对象'dbo.A'中插入重复键。重复键值为(VALUE)。
这是因为它是主键。
我的问题是:如何在不复制A中已存在的数据的情况下将数据从B复制到A.
答案 0 :(得分:2)
单引号表示SQL中的字符串文字。因此,您要检查字符串 'dbo.B.c1'
是否等于字符串 'dbo.A.c1'
,当然,这绝不是真的。只需删除它们就可以了:
INSERT INTO dbo.A
SELECT DISTINCT *
FROM dbo.B
WHERE NOT EXISTS (SELECT *
FROM dbo.A
WHERE dbo.B.c1 = dbo.A.c1 -- No quotes!
)