私たちはSQL Server CEデータベースを使用しています。私は、SQL Server CEデータベースで動作するトリガーの種類には制限があることを理解しています。たとえば、SQL Server CEテーブルのトリガはストアドプロシージャを呼び出すことはできませんが、別のテーブルに更新/挿入できます。SQL Server CEでこのトリガが起動できないのはなぜですか?
私たちは、テーブルへの変更(挿入/更新/削除)があるときに電子メール通知を送信するトリガです。テーブルに直接トリガを設定して電子メール(EXEC msdb.dbo.sp_send_dbmail)を送信すると、テーブルにプッシュしようとするとエラーが発生することがわかります。明らかにSQL Server CEは、ストアドプロシージャを起動するトラッキングテーブルのトリガをサポートしていません。
これを回避するために、テーブルにトリガを設定して、CE同期の一部として追跡されない別のテーブル(_table_changes)に行を挿入します。このテーブル(_table_changes)では、電子メール通知を送信するためのトリガを設定しました。これは、追跡されたCEテーブルのトリガがストアドプロシージャを起動できないという問題を回避し、電子メールを送信することを望みました。
ただし、テーブルがプッシュ/プル同期の一部ではない場合でも、電子メールトリガを有効にすると同期は機能しません。どうしてこれなの? CEは、同期化の一部ではないテーブルに、ストアドプロシージャを起動して電子メールを送信するためのトリガーがトリガーされていることを、どのように認識することができますか?
テーブルを更新するトリガーはうまく動作し、同期には影響しません。 テーブルをSSMSで直接編集してもRDAモードでは編集しないと、電子メールトリガはうまく動作します。このため、トリガーはサポートされていないため混乱していますが、一部のインスタンスではまだ動作していますし、SSMSで直接作業することもできますが、アプリが同期するときではありません。 – kafka
@kafka:RDAがデータを取得するテーブルのトリガーですか? SQL CEはトリガーをサポートしていないので、少し混乱しています。 – codingbadger
これは事です:私たちは、RDAがプッシュ/プルするテーブル上のトリガーを持っています(それをユーザーと呼ぶことができます)。挿入/更新/削除のみを実行し、ユーザーが別のテーブル(_table_changes)に挿入するようにトリガーを取得します。 RDAはトリガーをサポートしていないように見えますが、ユーザーは追跡されたテーブルですが、これはまったく問題ありません。 次に、RDAで追跡されない_table_changesにトリガーを設定して、ユーザーテーブルのトリガーによって更新されたときに電子メールを送信します。書くのは混乱して、意味があると思う。このトリガは、手動で編集するとSSMSでうまく動作しますが、RDAがユーザーにプッシュするのを止めます。 – kafka