2012-03-15 2 views
0

私たちは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は、同期化の一部ではないテーブルに、ストアドプロシージャを起動して電子メールを送信するためのトリガーがトリガーされていることを、どのように認識することができますか?

答えて

2

テーブルがCE同期の一部として追跡されるかどうかは重要ではないと思います。

トリガーはSQL Server CEの中this MSDN article RDAによると、SQL ServerのCompact Editionの4.0

Differences Between SQL Server Compact and SQL Server

EDIT

をサポートしていませんがRDAからデータを引き出し、SQL Serverのテーブルにトリガすることができます。また、テーブルを追跡すると、変更がSQL ServerにプッシュバックされたときにSQL Serverトリガを実行できることも記載されています。

トリガー。 SQL Server Compact Editionはトリガをサポートしていません。 ただし、RDAが データを取得するSQL Serverテーブルにトリガーを置くことができます。追跡されたテーブルの場合、変更がSQL Serverにプッシュバックされると、SQL Serverのトリガーは に実行されます。トリガロジックで SET NOCOUNT ONを指定する必要があるかもしれません。これは、影響を受けていない行数 を返さないことを示します。これは、「影響を受けていない行」の応答 がRDAプッシュメソッドにエラーを発生させるためです。

あなたのトリガー内でSET NOCOUNT ONを使用していることを確認します。

上記のように、前述したように、SQL Server CEでのトリガーの使用はサポートされていません。

もっと良い解決策は、送信が必要な電子メールのキューテーブルを作成することでしょう。このデータがSQL ServerからSQL Serverにプッシュされると、キューテーブルを確認してそのようにメールを送信するSQLエージェントジョブをスケジュールできます。

+0

テーブルを更新するトリガーはうまく動作し、同期には影響しません。 テーブルをSSMSで直接編集してもRDAモードでは編集しないと、電子メールトリガはうまく動作します。このため、トリガーはサポートされていないため混乱していますが、一部のインスタンスではまだ動作していますし、SSMSで直接作業することもできますが、アプリが同期するときではありません。 – kafka

+0

@kafka:RDAがデータを取得するテーブルのトリガーですか? SQL CEはトリガーをサポートしていないので、少し混乱しています。 – codingbadger

+0

これは事です:私たちは、RDAがプッシュ/プルするテーブル上のトリガーを持っています(それをユーザーと呼ぶことができます)。挿入/更新/削除のみを実行し、ユーザーが別のテーブル(_table_changes)に挿入するようにトリガーを取得します。 RDAはトリガーをサポートしていないように見えますが、ユーザーは追跡されたテーブルですが、これはまったく問題ありません。 次に、RDAで追跡されない_table_changesにトリガーを設定して、ユーザーテーブルのトリガーによって更新されたときに電子メールを送信します。書くのは混乱して、意味があると思う。このトリガは、手動で編集するとSSMSでうまく動作しますが、RDAがユーザーにプッシュするのを止めます。 – kafka

関連する問題