在基于临时表的表中插入记录

时间:2019-05-30 16:13:01

标签: sql sql-server insert updating

我可以选择临时表(_tmp_mj)中的记录(序列号)。我想使用此临时表将项目插入另一个表。

我正在使用的代码如下所示。它已成功完成,但似乎没有更新任何记录。

IF NOT EXISTS(SELECT serialnumber FROM _tmp_mj WHERE serialnumber = _tmp_mj.serialnumber)
    INSERT INTO CPAR
        (parametercategory, parametername, priority)
        VALUES 
        ('Constituent Code','Major Donor','Normal')

我想要实现的是将相关值添加到CPAR表中(如果这些值尚不存在),而仅适用于_TMP_MJ表中保留的SERIALNUMBER。

任何帮助将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用INSERT ... SELECT ...,使用NOT EXISTS选择所有尚不存在的序列号。

INSERT INTO cpar
            (serialnumber,
             parametercategory,
             parametername,
             priority)
            SELECT _tmp_mj.serialnumber,
                   'Constituent Code',
                   'Major Donor',
                   'Normal'
                   FROM _tmp_mj
                   WHERE NOT EXISTS (SELECT *
                                            FROM cpar
                                            WHERE cpar.serialnumber = _tmp_mj.serialnumber);

答案 1 :(得分:0)

INSERT创建一条新记录。如果我正确阅读了您的问题,则您似乎想执行UPDATE

在以下情况下,这将使用指定的值更新枚举列:

1)该列当前为“ NULL”(否则它将保留那里的值)并且

2)在工作表中找到基表的序列号。

UPDATE c 
  SET
    c.parametercategory = COALESCE(c.parametercategory,'Constituent Code'), 
    c.parametername = COALESCE(c.parametername,'Major Donor'), 
    c.priority = COALESCE(c.priority,'Normal')
FROM
  CPAR AS c
JOIN
  _tmp_mj AS t
    ON t.serialnumber = c.serialnumber