Чтение значений, вставленных триггером в другую таблицу - PullRequest
0 голосов
/ 19 января 2012

У меня следующая проблема: у меня есть триггер в таблице A, цель которого - вычислить некоторые значения и вставить их в совершенно другую таблицу B. Проблема в том, что где-то в этой логике есть цикл, который требует значений, которые были бы недавно вставлены в таблицу B. Я заметил, что SQL Server выполняет все команды INSERT сразу после выхода из триггера.

ALTER TRIGGER [dbo].[InsertTrade]
ON [dbo].[Blotter]
AFTER INSERT
AS 
BEGIN

/* compute @Variables */

INSERT INTO [dbo].[CompletelyUnrelatedTableWithoutTriggersOnIt]
VALUES @Variables

Есть ли способ COMMMIT, что INSERT и возможность читать эти значения, пока они еще в триггере?

Спасибо, D.

1 Ответ

1 голос
/ 19 января 2012

Прежде всего, будьте очень осторожны с тем, как вы строите свой триггер. Если вы используете INSERT...VALUES() в триггере, это хороший признак того, что вы предполагаете, что в таблице INSERTED будет только одна запись. Никогда не делай такое предположение. Вместо этого ваша логика должна быть INSERT...SELECT <computed cols> FROM INSERTED

Во-вторых, если вы хотите получить значения, которые вы только что ввели, вы можете использовать предложение OUTPUT , но я не уверен, что вы это имеете в виду (не совсем понятно, что вы хотите сделать со значениями), тогда вы будете иметь доступ к окончательным значениям, которые были вставлены "пока в триггере"

Если это не , что вы хотите, возможно, было бы лучше инкапсулировать всю эту функциональность в процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...