Можно ли вызывать триггер SQL программно? - PullRequest
2 голосов
/ 16 октября 2011

Я знаю, что при таких обстоятельствах я должен использовать хранимые процедуры,

но все же я хочу знать, возможно ли это? Если НЕТ, почему? Если ДА, как?

Ответы [ 3 ]

10 голосов
/ 16 октября 2011

Первое, что приходит на ум, это

update yourtable
set yourcolumn = yourcolumn
-- consider a 'where' statement

Я предполагаю, что это вызовет триггер, ничего не меняя. Таким образом, вызывается с кодом.

6 голосов
/ 16 октября 2011

Вы не можете вызывать триггеры напрямую.Они запускаются автоматически, когда вы выполняете вставку / обновление или удаление таблицы, в которой есть триггеры.Следовательно, вы не можете вызвать триггер в хранимой процедуре.При запуске триггера необходимо удалить или вставить запись, и я не вижу, как ее можно передать ...

3 голосов
/ 16 октября 2011

По определению «триггер» - это процедура, которая срабатывает при изменении таблицы.Я полагаю, вы могли бы запустить его программно, выполнив обновление / удаление / создание для таблицы с триггером.

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

Если вам нужна процедура, которая может быть выполнена как триггер и вручную, почему бы не создать хранимую процедуру, а затем создать триггер, который просто имеет одну строку, которая запускает эту процедуру?

Если вы пишете некоторый тестовый / диагностический код и действительно нуждаетесь в вызове некоторого триггерного кода, вы можете использовать некоторый мета-API (я помню, у Oracle было что-то подобное. Не уверен насчет сервера SQL, но он должен иметь что-то) извлечь код и втирать его в хранимую процедуру.Если вы сделаете это, как уже упоминал Alex_L, вам придется каким-то образом подделать строки псевдообновления, которые обычно доступны только для триггеров.

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