rus*_*sds 3 sql merge insert sql-server-2008
这就是我想要的:将行从tableA复制到tableB,但不是已经存在于tableB中的任何行.没有PK或识别,我只想检查每个字段,如果匹配的行包含所有相同的字段,则不插入.我试过INSERT和MERGE:
--try with INSERT
INSERT TableB(col1,col2,col3,col4,col5,col6, etc.)
SELECT (col1,col2,col3,col4,col5,col6, etc.)
FROM tableA as src
WHERE NOT EXISTS (SELECT 1 FROM TableB as T
WHERE
T.col1 = src.col1 AND
T.col2 = src.col2 AND
T.col3 = src.col3 AND
T.col4 = src.col4 AND
T.col5 = src.col5 AND
T.col6 = src.col6, etc.)
Run Code Online (Sandbox Code Playgroud)
我也尝试过MERGE:
MERGE INTO tableA src
USING tableB T
ON (
T.col1 = src.col1 AND
T.col2 = src.col2 AND
T.col3 = src.col3 AND
T.col4 = src.col4 AND
T.col5 = src.col5 AND
T.col6 = src.col6, etc.)
WHEN NOT MATCHED THEN
INSERT (col1,col2,col3,col4,col5,col6, etc.)
VALUES (col1,col2,col3,col4,col5,col6, etc.);
Run Code Online (Sandbox Code Playgroud)
两者都完全相同:我会进行插入(或合并),最初所有行都被导入,这很好,但是第二次尝试(应该插入/合并0行)它将插入/合并60%的行.
我相信这个问题是因为我没有PK,这是我在其他帖子上看到的.我只是想在所有领域匹配,这可能吗?我错过了什么吗?
感谢您的任何建议/指导!
您可以使用EXCEPT
INSERT INTO table1
SELECT * from table2
EXCEPT
SELECT * from table1;
Run Code Online (Sandbox Code Playgroud)
看看这里的小提琴