Как правильно реализовать триггер в MS SQL 2005/2008? - PullRequest
0 голосов
/ 22 апреля 2009

Это может быть тривиальный вопрос, но я все равно его задам: может ли обновление трех или четырех таблиц в одной базе данных вызывать обновления одной или двух таблиц в другой базе данных (в MS SQL 2005?) Я счастлив создать любое количество необходимого T-SQL, и у меня также есть VS 2008 со способностью C #, но я никогда раньше не писал такой триггер.

По сути, у меня был метод GetProducts () хранилища данных, который вызывал мою хранимую процедуру каждый раз, когда любые данные загружались с той областью, в которой они нуждались, и я физически изменял «кэшированные» данные. В жизни все было хорошо.

Теперь они вообще не хотят обновлять данные как часть хранилища. Они считают, что он является внешним по отношению к проекту и должен обрабатываться без взаимодействия.

Кто-нибудь есть какие-либо предложения о том, что преследовать? Ссылки на идеи, которые уже есть, были бы фантастическими.

Ответы [ 3 ]

2 голосов
/ 22 апреля 2009

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

В качестве альтернативы вы можете написать триггер для проверки других таблиц, чтобы убедиться, что у всех есть записи. Или вы можете написать один триггер для каждой таблицы. Или, если обновления в реальном времени не требуются, у вас может быть задание, которое периодически запускается для обработки необходимых изменений. Не зная точно, что вы хотите сделать, трудно сказать, как лучше всего справиться с вашей конкретной ситуацией. Что бы вы ни делали с триггерами, помните, что триггеры работают с наборами данных, а не по одной строке за раз. Они всегда должны быть написаны для обработки вставки, обновления или удаления нескольких строк, или рано или поздно ваш триггер вызовет проблемы целостности данных. Не делайте этого курсором, если вы не хотите, чтобы ваши производственные таблицы блокировались на часы в то время, когда кто-то должен добавить 3 000 000 новых записей для нового клиента.

1 голос
/ 22 апреля 2009

если это то, что вы хотите:

check database A for updates of table1, table2, table3, and or table4    
then update database B table5 and/or table6

вам нужно использовать хранимую процедуру для инкапсуляции всей необходимой логики и транзакций для исходных обновлений в базе данных A и результирующих обновлений в базе данных B

0 голосов
/ 22 апреля 2009

Вы спрашиваете, обновляете ли вы эти три таблицы, а затем запускаете триггер? Но если вы обновите только две из трех таблиц, не сработать ли триггер?

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

Однако не существует ничего, что могло бы связать то, что, я думаю, вы описали. Не сказать, что это не может быть сделано.

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