MS SQL - 插入不存在的地方不存在问题

时间:2015-12-14 13:58:40

标签: sql sql-server primary-key sql-insert

我已经查看了堆栈溢出中的其他线程,将数据从一个表复制到另一个表(但不复制重复数据)。但我一直在讨论这个问题。

我有表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.

1 个答案:

答案 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!
                  )