Как уже упоминалось в StepUp, классический способ сделать это - использовать AFTER TRIGGER. Пример решения будет запускаться только с UPDATE. В вашем случае вы также хотели бы добавить триггеры для INSERT и DELETE или адаптировать этот один триггер для обработки этих трех типов событий.
Обратите внимание, что использование триггера может повлиять на @@ ROWCOUNT, поэтому может повлиять на функциональность.
Из-за этого, я думаю, что последние версии SQL Server имеют альтернативные механизмы.
SELECT col
FROM
(
SELECT a col, 0 ordinal FROM A LIMIT 1
UNION ALL
SELECT b, 1 FROM B LIMIT 1
) t
ORDER BY ordinal
Я не думаю, что порядок гарантируется, по крайней мере, не через весь DBMS.
то, Что я сделал в прошлом для управления упорядочиванием в ОБЪЕДИНЕНИЯХ:
(SELECT a, 0 AS Foo FROM A LIMIT 1)
UNION
(SELECT b, 1 AS Foo FROM B LIMIT 1)
ORDER BY Foo
Ваш набор результатов с UNION
устранит отличные значения.
я не могу найти доказательство в документации, но от 10
опыт лет я могу сказать, что UNION ALL
действительно сохраняет порядок, по крайней мере, в Oracle
.
не полагаются на это, однако, если Вы создаете атомную станцию или что-то как этот.
Нет, порядком результатов в SQL-запросе управляет только пункт ORDER BY. Может случиться так, что Вы, оказывается, видите заказанный результаты без пункта ORDER BY в некоторой ситуации, но это случайно (например, побочный эффект текущего плана запросов оптимизатора) и не гарантировано.
, Что хитрое заказывает проблеме?
Я знаю для Oracle нет никакого способа гарантировать, который выйдет сначала без порядка. Проблема состоит в том при попытке ее, она может выйти в правильном порядке даже в течение большинства времен, Вы выполняете ее. Но как только Вы полагаетесь на него в производстве, это выйдет неправильно.
Я думал бы не, так как база данных должна будет, скорее всего, сделать ORDER BY чтобы к ОБЪЕДИНЕНИЮ.
ОБЪЕДИНЕНИЕ ВСЕ могли бы вести себя по-другому, но YMMV.