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

Kyl*_*yle 14 t-sql conditional stored-procedures insert

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

INSERT INTO myStagingTable
SELECT col1, col2, col3
FROM myRealTable
Run Code Online (Sandbox Code Playgroud)

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

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

TIA

Qua*_*noi 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
        )
Run Code Online (Sandbox Code Playgroud)

这将处理所有重复(包括NULL)

注意,将从真实表中插入重复项是任意的.假设真实表包含

1 1 1
1 1 1
Run Code Online (Sandbox Code Playgroud)

并且登台表包含

2 2 2
Run Code Online (Sandbox Code Playgroud)

,1, 1, 1将插入两个记录.

如果你想消除插入的重复项(这样只1, 1, 1插入一个实例),那么只需使用:

INSERT
INTO    myStagingTable
SELECT  col1, col2, col3
FROM    myRealTable
EXCEPT
SELECT  col1, col2, col3
FROM    myStagingTable
Run Code Online (Sandbox Code Playgroud)