查詢通知訊息包含 XML。每個訊息會包含建立該訊息的原因,以及要在通知建立時併入的通知訊息。
當 Message 元素包含訂閱的通知識別碼時,QueryNotification 元素的屬性就可以識別訊息的原因。例如,以下顯示的 XML 文件是完整的查詢通知訊息,已針對可讀性重新格式化:
<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 文件傳遞通知,所以 Database Engine 逸出字元在 XML 文件中無效。例如,如果以訂閱提交的訊息包含字元 <,傳回的 XML 會將此字元逸出為 <。 |
下表列出每個屬性的值。SQL Server 只會產生特定的屬性組合。例如,因為 change 的 Type 必須要已經建立訂閱,所以 change 的 Type 從不會與 statement 的 Source 結合。
查詢通知訊息分成兩個主要類型,以 Type 屬性的值來區分。Database Engine 會建立類型 change 的訊息,以指出查詢的結果已經有所變更。Database Engine 會建立類型 subscribe 的訊息,以指出訂閱要求失敗。其他兩種屬性的值可以指出 SQL Server 建立該訊息的確切原因。
變更訊息
發生可能會影響查詢結果的變更時,SQL Server 就會產生類型 change 的訊息。下表描述變更訊息:
| 來源 | 資訊 | 描述 |
|---|---|---|
data |
truncate |
在查詢中參考的一或多個資料表已遭截斷。 |
data |
insert |
SQL Server 已在查詢中參考的一或多個資料表上處理 INSERT 陳述式。 |
data |
update |
SQL Server 已在查詢中參考的一或多個資料表上處理 UPDATE 陳述式。 |
data |
delete |
SQL Server 已在查詢中參考的一或多個資料表上處理 DELETE 陳述式。 |
timeout |
none |
訂閱等候時間逾時。 |
object |
drop |
查詢使用的其中一個基礎物件已遭卸除。 |
object |
alter |
查詢使用的其中一個基礎物件已遭修改。 |
system |
restart |
SQL Server 已啟動。 |
system |
error |
SQL Server 中發生內部錯誤。 |
system |
resource |
由於 SQL Server 的狀態,而已經移除通知訂閱,例如工作負載沈重的伺服器。 |
訂閱訊息
當 SQL Server 無法建立訂閱時,伺服器會立即產生類型 subscribe 的訊息。下表描述**「訂閱」**訊息:
| 來源 | 資訊 | 描述 |
|---|---|---|
statement |
query |
已提交的命令包含不符合查詢通知需求的 SELECT 陳述式。 |
statement |
invalid |
已提交的命令包含不支援通知的陳述式 (例如 INSERT 或 UPDATE)。 |
statement |
previous invalid |
交易中的前一個命令包含不支援通知的陳述式 (例如 INSERT 或 UPDATE)。 |
statement |
set options |
提交命令時,並未正確設定連接選項。 |
statement |
isolation |
隔離層級對查詢通知而言無效 (SNAPSHOT 隔離層級)。 |
statement |
query template limit |
查詢中指定的資料表已達到內部範本的最大數目。 |
附註: