Вставка записей в таблицу на основе временной таблицы - PullRequest
0 голосов
/ 30 мая 2019

У меня есть выборка записей (серийные номера) во временной таблице (_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, если эти значения еще не существуют,но только для SERIALNUMBER, содержащихся в таблице _TMP_MJ.

Любая помощь будет принята с благодарностью.Спасибо.

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

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
0 голосов
/ 30 мая 2019

Вы можете использовать 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...