Почему SQL Server CE не позволяет запускать этот триггер? - PullRequest
0 голосов
/ 15 марта 2012

Мы используем базу данных SQL Server CE. Я понимаю, что существуют ограничения на типы триггеров, которые работают с базой данных SQL Server CE. Например, триггер в таблице SQL Server CE не может вызвать хранимую процедуру, но он может обновить / вставить в другую таблицу.

Что нам нужно, так это триггер для отправки уведомления по электронной почте, когда в таблицу вносятся изменения (вставка / обновление / удаление). Мы знаем, что если мы установим триггер непосредственно на стол для отправки электронного письма (EXEC msdb.dbo.sp_send_dbmail), то вы получите ошибку при попытке нажать на таблицу. Очевидно, что SQL Server CE не поддерживает триггер для отслеживаемой таблицы, который запускает хранимую процедуру.

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

Однако, несмотря на то, что таблица не является частью push / pull-синхронизации, если мы включим триггер электронной почты, синхронизация не будет работать. Почему это? Как CE может знать, что таблица, которая не является частью синхронизации, имеет триггер, который запускает хранимую процедуру для отправки электронной почты?

1 Ответ

2 голосов
/ 15 марта 2012

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

Триггеры не поддерживаются в SQL Server Compact Edition 4.0

Различия между SQL Server Compact и SQL Server

EDIT

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

Триггеры. SQL Server Compact Edition не поддерживает триггеры. Однако триггеры могут находиться в таблице SQL Server, которую извлекает RDA. данные из. Для отслеживаемых таблиц триггеры SQL Server могут быть выполнены когда изменения возвращаются в SQL Server. Возможно, вам придется указать Установите NOCOUNT ON в логике триггера. Это означает, что не нужно возвращать количество затронутых строк, потому что ответ "нет затронутых строк" вызывает ошибку для метода RDA Push.

Я бы проверил, что вы используете SET NOCOUNT ON в вашем триггере.

Сказав все это и как уже упоминалось выше, использование триггеров в SQL Server CE не поддерживается.

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

...