クエリ通知メッセージには XML が含まれます。各メッセージには、メッセージが作成された理由、および通知が作成されたときの通知メッセージが含まれています。
QueryNotification 要素の属性は、メッセージが出力された理由を特定しています。また、Message 要素には、サブスクリプションに対する通知 ID が含まれます。たとえば、次に示す XML ドキュメントは、1 つの完結したクエリ通知メッセージです。読みやすいように、フォーマットを編集してあります。
<qn:QueryNotification
xmlns:qn="https://schemas.microsoft.com/SQL/Notifications/QueryNotification"
Type="change" Source="data" Info="insert">
<qn:Message>http://adventure-works.com/catalog.aspx?Category=Cars</qn:Message>
</qn:QueryNotification>
このクエリ通知メッセージは、INSERT ステートメントによってサブスクリプションのデータが変更されたことを、メッセージ (http://adventure-works.com/catalog.aspx?Category=Cars) 付きで報告しています。
メモ : |
|---|
通知は XML ドキュメントとして配信されます。そのため、XML ドキュメントで有効でない文字はデータベース エンジンによってエスケープされます。たとえば、サブスクリプションで送信されるメッセージに、文字 < が含まれている場合、返される XML ではこの文字がエスケープされ、< となります。 |
各属性に対する値を次の表に示します。SQL Server では特定の組み合わせの属性だけが生成されます。たとえば、Type 属性の値 change に対しては、サブスクリプションが作成されている必要があるため、Type 属性の値 change は、Source 属性の値 statement と組み合わせられることはありません。
クエリ通知メッセージは 2 つの主要な種類に分類されます。この種類は、Type 属性の値によって区別されます。クエリの結果が変更されたことを示す場合、データベース エンジンによって、Type 属性が change であるメッセージが作成されます。サブスクリプション要求が失敗したことを示す場合、データベース エンジンによって、Type 属性が subscribe であるメッセージが作成されます。その他の 2 つの属性の値は、SQL Server によってメッセージが作成された理由を正確に示します。
メッセージの変更
クエリの結果に影響する可能性のある変更が加えられた場合、SQL Server によって、Type 属性が change のメッセージが生成されます。次の表では、change のメッセージについて説明します。
| Source | Info | 説明 |
|---|---|---|
data |
truncate |
クエリで参照されている 1 つ以上のテーブルが切り捨てられました。 |
data |
insert |
SQL Server によって、クエリで参照されている 1 つ以上のテーブルに対して INSERT ステートメントが処理されました。 |
data |
update |
SQL Server によって、クエリで参照されている 1 つ以上のテーブルに対して UPDATE ステートメントが処理されました。 |
data |
delete |
SQL Server によって、クエリで参照されている 1 つ以上のテーブルに対して DELETE ステートメントが処理されました。 |
timeout |
none |
サブスクリプションのタイムアウトが発生しました。 |
object |
drop |
クエリによって使用されている、基になるオブジェクトの 1 つが削除されました。 |
object |
alter |
クエリによって使用されている、基になるオブジェクトの 1 つが変更されました。 |
system |
restart |
SQL Server が起動しました。 |
system |
error |
SQL Server で内部エラーが発生しました。 |
system |
resource |
通知サブスクリプションは、サーバーの負荷が高いなど、SQL Server 状態が原因で削除されました。 |
メッセージのサブスクライブ
SQL Server でサブスクリプションを作成できない場合、サーバーによって直ちに Type 属性が subscribe のメッセージが生成されます。次の表では、subscribe のメッセージについて説明します。
| Source | Info | 説明 |
|---|---|---|
statement |
query |
送信されたコマンドに、クエリ通知の要件を満たしていない SELECT ステートメントが含まれていました。 |
statement |
invalid |
送信されたコマンドに、通知をサポートしないステートメント (INSERT や UPDATE など) が含まれていました。 |
statement |
previous invalid |
同一トランザクションの前のコマンドに、通知をサポートしないステートメント (INSERT や UPDATE など) が含まれていました。 |
statement |
set options |
コマンドが送信されたときに、接続オプションが正しく設定されていませんでした。 |
statement |
isolation |
分離レベルが、クエリ通知に対して有効ではありませんでした (SNAPSHOT 分離レベル)。 |
statement |
query template limit |
クエリ内で指定されたテーブルが内部テンプレート数の最大値に達しました。 |
メモ :