我正在创建一个sproc,它会将行插入到'staging'表中,并插入+子查询,如下所示:
INSERT INTO myStagingTable
SELECT col1, col2, col3
FROM myRealTable
我需要以某种方式在那里放置条件以确定来自col1的值是否已经存在于myStagingTable上,然后不插入它,只是从myRealTable中跳过该行。
这可能吗?如果是这样,我将如何构建它?TIA
答案 0 :(得分:16)
INSERT
INTO myStagingTable
SELECT col1, col2, col3
FROM myRealTable rt
WHERE NOT EXISTS
(
SELECT rt.col1, rt.col2, rt.col3
INTERSECT
SELECT col1, col2, col3
FROM myStagingTable
)
这将处理所有重复项(包括NULL
)
注意,将从真实表中插入重复项是任意的。假设真实表包含
1 1 1
1 1 1
并且登台表包含
2 2 2
,将插入1, 1, 1
的两个记录。
如果要消除插入时的重复项(以便只插入一个1, 1, 1
实例),那么只需使用:
INSERT
INTO myStagingTable
SELECT col1, col2, col3
FROM myRealTable
EXCEPT
SELECT col1, col2, col3
FROM myStagingTable