Проверьте существующую строку перед выполнением вставки - PullRequest
0 голосов
/ 10 марта 2011

Столбцы таблицы 1:

код клиники, дата-расписания, расписание-время, идентификатор_источника

Столбцы таблицы2:

код-клиники, дата-расписание, время-расписание

Существует хранимая процедура, которая:
1. Удаляет все записи в Таблице 1, где clinic_code = 'ABC' И schedule_date = xyz 2. Вставляет все записи из таблицы2, где table2.clinic_code = 'ABC'И table2.schedule_date = xyz в table1.

Я хочу внести изменения в шаге 2.
* 2.ВСТАВЬТЕ все записи из table2, где table2.clinic_code = 'ABC' И table2.schedule_date = xyz, но не перезаписывайте эти строки в table1, где source_id = 2.

Вот оригинальный оператор вставки на шаге 2:

INSERT INTO table1 (col1, col2, col3)
SELECT table2.col1, table3.col2, table2.col3
FROM table2
INNER JOIN table3 ON table2.col3 = table3.col5 AND etc...

Имена таблиц и дополнительные столбцы опущены, если это будет полезно, я могу указать точное количество столбцов.

Ответы [ 2 ]

1 голос
/ 10 марта 2011

Я не уверен, что полностью следую, потому что, если вы вставляете строки в table1, table1.col3 еще не будет иметь значения для этих строк.Если вы просто хотите избежать использования table1.col3 = 2, вы можете использовать предложение where, например:

INSERT INTO table1 (col1, col2, col3)
SELECT table2.col1, table3.col2, table2.col3
FROM table2
INNER JOIN table3 ON table2.col3 = table3.col5 AND etc...
WHERE table2.col3 <> 2

, что позволит избежать вставки значения 2 в table1.col3, поскольку table2.col3 - это место, где вывытаскиваешь.Если я здесь упускаю суть, дайте мне знать, но это должно сработать.

РЕДАКТИРОВАТЬ - учитывая, что вы сказали, что записи между table1 и table2 похожи, и предположим, что есть столбец, к которому можно присоединитьсямежду двумя таблицами вы можете сделать что-то вроде этого:

INSERT INTO table1 (col1, col2, col3)
SELECT table2.col1, table3.col2, table2.col3
FROM table2
INNER JOIN table3 ON table2.col3 = table3.col5 AND etc...
LEFT OUTER JOIN table1 t1 ON tl.colX = table2.colX
WHERE table1.col3 <> 2

Идея состоит в том, что вы теперь включили table1 в ваш SELECT и, таким образом, можете также включить его в ваше предложение WHERE.(Простите, если для других разновидностей SQL отключен синтаксис псевдонимов, я в основном знаком с T-SQL.)

0 голосов
/ 10 марта 2011

Ну, я не знаю, какой SQL вы используете, поэтому вот стандартный скрипт SQL:

BEGIN TRANSACTION ;
       IF NOT EXISTS ( SELECT * FROM dbo.table1 WHERE   col3 = 2 )
       BEGIN ;
           ...your insert goes here
       END ;
COMMIT ;
...