【问题标题】:sql conditional insert if row doesn't already exist如果行不存在,则 sql 条件插入
【发布时间】:2010-02-19 01:48:43
【问题描述】:

我正在创建一个 sproc,它将行插入到“暂存”表中,并像这样插入 + 子查询:

INSERT INTO myStagingTable
SELECT col1, col2, col3
FROM myRealTable

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

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

TIA

【问题讨论】:

    标签: tsql stored-procedures insert conditional


    【解决方案1】:
    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

    请注意,将插入来自真实表的重复项是 any。说如果真正的表包含

    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
    

    【讨论】:

    • 您不应该指定在 INTSERSECT 子句两侧选择的列吗?如果 myRealTable 中有四个列怎么办?
    猜你喜欢
    • 2018-09-17
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    相关资源
    最近更新 更多