Как работать с текущей записью, создаваемой в триггере SQL

#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 или курсор, но производительность обычно низкая.