我有一个包含2个字段的表,这些字段不是主键,它们不能像我有重复项一样。 我想从连接表中插入数据,但避免更多重复。我做的是:
insert into X(A,B)
select *
from (Y.A, Z.B
from Y join Z
on (Y.id = Z.id)) tmp
WHERE NOT EXISTS (SELECT * FROM X
WHERE A = tmp.A
AND B = tmp.B)
据我所知,最好不要使用INSERT ... WHERE NOT EXISTS,您认为这类代码可能存在问题吗?
答案 0 :(得分:0)
您可以使用MERGE查询
MERGE X AS TARGET 使用(选择Y.A AS A,Z.B AS B Y inner JOIN Z ON Y.Id = Z.Id)AS SOURCE ON TARGET.A = SOURCE.A和TARGET.B = SOURCE.B 当没有匹配时 INSERT VALUES(SOURCE.A,SOURCE.B)
http://www.codeproject.com/Tips/590085/Merge-in-SQL-Server-2008 http://blog.sqlauthority.com/2010/06/08/sql-server-merge-operations-insert-update-delete-in-single-execution/