Существует три таблицы: две восходящие table A and B
и одна нижняя table C
. Записи в table A and B
обрабатываются и объединяются в table C
.
Table A ( id_a identity not null, prop, val )
Table B ( id_b identity not null, prop, val )
Table C ( id_c,
original_id [id_a or id_c],
prop, processed_val,
source_table [ 'A' or 'B' ] )
NOTE: id_a and id_b has different format they never collide.
Мне нужно исправить поведение некоторых приложений без доступа к коду приложения. поэтому я пытаюсь прикрепить триггер на table C
и манипулировать process_val
в зависимости от исходных данных.
Я мог бы сделать
UPDATE C
SET processed_value = NEW_FUNCTION( coalesce(A.val,B.val) )
FROM inserted
LEFT JOIN A ON ( C.orginal_id = A.id )
LEFT JOIN B ON ( C.orginal_id = B.id )
Но я думаю, что для того, чтобы вернуть результат, придется пройти через индекс двух таблиц. Я не хочу использовать динамический запрос, я хочу, чтобы он был простым как процедура sql.
Интересно, поможет ли sth, как показано ниже, предотвратить поиск избыточности, поскольку эти ключи не должны быть NULL
, будет ли значение NULL
останавливать поиск?
UPDATE C
SET processed_value = NEW_FUNCTION( coalesce(A.val,B.val) )
FROM inserted
LEFT JOIN A ON ( A.id = case when source_table='A' then C.orginal_id else NULL end )
LEFT JOIN B ON ( B.id = case when source_table='B' then C.orginal_id else NULL end )
Или в MSSQL есть другой способ динамического переключения исходной таблицы (без динамического запроса)?