sql条件插入如果行尚不存在

时间:2010-02-18 17:39:11

标签: tsql stored-procedures insert conditional

我正在创建一个sproc,它会将行插入到'staging'表中,并插入+子查询,如下所示:

INSERT INTO myStagingTable
SELECT col1, col2, col3
FROM myRealTable

我需要以某种方式在那里放置条件以确定来自col1的值是否已经存在于myStagingTable上,然后不插入它,只是从myRealTable中跳过该行。

这可能吗?如果是这样,我将如何构建它?

TIA

1 个答案:

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