Update&insert&delete в один запрос

  • Автор темы l0nley
  • Дата начала
L

l0nley

Исходная:
есть таблица price_supplier:
Код:
orphan char(50) not null,
partnum char(50) not null,
descr char(100) default 'Нет описания',
amount_s char(5) not null default '0',
skv_code char(5) not null default 'EUR',
price float not null

есть вторая таблица td_avail:
Код:
orphan char(50) not null,
partnum char(50) not null,
description char(100) not null default 'Нет описания',
amount_s char(5) not null default '0',
currency char(5) not null default 'EUR',
price float not null,
supplier char(50) not null default 'My company'

Описание таблиц:

price_supplier - Таблица наличия товара у данного поставщика. Для каждого из поставщиков
существует отдельная таблица с именем price_<поставщик>.

td_avail - таблица наличия товаров у всех поставщиков.

Товары идентифицируются парой (orphan,partnum)

Задача:

Известно сразу - поставщик supplier='какойто поставщик'

Если товар (orphan,partnum,supplier) есть в таблице price_supplier и в таблице td_avail -> обновить
данные о товаре из таблицы price_supplier в таблице td_avail для данного поставщика
Если товар (orphan,partnum,supplier) есть в таблице price_supplier но нету в td_avail - > добавить
товар (orphan,partnum,supplier,description...) в таблицу td_avail
Если товар (orphan,partnum,supplier) есть в таблице td_aval, но нету в таблице price_supplier ->
удалить товар (orpha,partnum,supplier) из таблицы td_avail


Интересует не решение "в лоб", а как это сделать в один запрос?
рыл в сторону MERGE ничего не нарыл по последнему пункту.

в ответах желательно диалект TSQL для MSSQL 2000
 
E

European

Не вникая в особенности ваших таблиц спрошу, а чем же триггеры не устраивают?
 
E

etc

Одним запросом никак, тут либо мерж, правда незнаю как он в 2000 и есть ли он там,
либо сторед процедура.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!