#sql #triggers
#sql #триггеры
Вопрос:
Я не знаю, правильно ли я это делаю, но вот так…
Я хочу написать SQL-триггер, который просматривает текущую вставляемую запись и реагирует на нее, но мой вопрос в том, как мне работать с данными в этой записи?
Например, если новый заказ был вставлен в таблицу orders , я хочу иметь возможность получить имя клиента из этого заказа для использования в некоторой логике (пока скажем, электронное письмо).
Я думал об использовании SELECT
statment, который возвращал TOP 1
и ORDER BY DESC
, но мне это кажется немного неаккуратным?
Любой совет был бы с благодарностью принят!
Заранее спасибо.
Комментарии:
1. SQL Server или другая СУБД? Если SQL Server, то какой версии?
Ответ №1:
Для MS SQL Server вам необходимо запросить вставленную таблицу, чтобы получить вставляемые записи.
Хотя inserted
таблица будет включать все строки, вставляемые для этой транзакции. Обработка строк построчно обычно не рекомендуется в SQL Server. Вы должны использовать подход, основанный на наборе.
Очевидно, что если вставляется только одна строка, то в inserted
таблице будет только одна строка.
Комментарии:
1. Когда вы говорите, что вы не должны работать по строкам, вы имеете в виду, что невозможно / не рекомендуется использовать какой-либо «для каждого»?
2. @Jimbo: Я говорю, что обычно это не лучшая практика. Я не говорю, что этого не происходит, но по возможности лучше избегать этого. Вы можете использовать циклы while или курсор, но производительность обычно низкая.