GET CONVERSATION GROUP (Transact-SQL)
針對下一則要接收的訊息,傳回交談群組識別碼,並且針對含有該訊息的交談,鎖定交談群組。您可以利用交談群組識別碼,先擷取交談狀態資訊,再擷取訊息本身。
語法
[ WAITFOR ( ]
GET CONVERSATION GROUP @conversation_group_id
FROM <queue>
[ ) ] [ , TIMEOUT timeout ]
[ ; ]
<queue> ::=
{
[ database_name . [ schema_name ] . | schema_name . ] queue_name
}
引數
- WAITFOR
指定如果目前沒有訊息,GET CONVERSATION GROUP 陳述式便會等待訊息到達佇列。
- @conversation_group_id
這是一個變數,用來儲存 GET CONVERSATION GROUP 陳述式所傳回的交談群組識別碼。這個變數類型必須是 uniqueidentifier。如果沒有可用的交談群組,變數就設為 NULL。
- FROM
指定佇列,從中取得交談群組。
- database_name
這是包含要取得交談群組所在之佇列的資料庫名稱。當未提供 database_name 時,預設為目前的資料庫。
- schema_name
這是擁有要取得交談群組所在佇列的結構描述名稱。當未提供 schema_name 時,預設為目前使用者的預設結構描述。
- queue_name
這是取得交談群組所在的佇列名稱。
- TIMEOUT timeout
指定 Service Broker 等待訊息到達佇列的時間長度 (以毫秒為單位)。這個子句只適用於 WAITFOR 子句。如果使用 WAITFOR 的陳述式不包含這個子句,或者 timeout 為 -1,則等候時間沒有限制。如果已經到期,GET CONVERSATION GROUP 會將 @conversation_group_id 變數設為 NULL。
備註
重要事項: |
---|
如果 GET CONVERSATION GROUP 陳述式不是批次或預存程序中的第一個陳述式,就必須利用 Transact-SQL 陳述式結束字元分號 (;) 來終止前一個陳述式。 |
如果 GET CONVERSATION GROUP 陳述式中指定的佇列無法使用,陳述式便會發生 Transact-SQL 錯誤而失敗。
這個陳述式會傳回連接可以順利鎖定以及有可用訊息的下一個交談群組。因此,如果接著再呼叫同一交易中的 GET CONVERSATION GROUP,可能會鎖定不只一個交談群組。如果沒有可用的交談群組,陳述式便會傳回 NULL 當作交談群組的識別碼。
在指定 WAITFOR 子句時,陳述式會等候指定的逾期時間到達,或者等到出現可用的交談群組為止。如果佇列在陳述式等候時被卸除,陳述式會立即傳回錯誤。
在使用者自訂函數中,GET CONVERSATION GROUP 無效。
權限
若要從佇列取得交談群組識別碼,目前使用者必須有佇列的 RECEIVE 權限。
範例
A. 取得交談群組,無限期等候
這個範例會針對 ExpenseQueue 的下一則可用訊息,將 @conversation_group_id 設為交談群組識別碼。命令會等到訊息成為可用訊息為止。
DECLARE @conversation_group_id UNIQUEIDENTIFIER ;
WAITFOR (
GET CONVERSATION GROUP @conversation_group_id
FROM ExpenseQueue
) ;
B. 取得交談群組,等候一分鐘
這個範例會針對 ExpenseQueue 的下一則可用訊息,將 @conversation_group_id 設為交談群組識別碼。如果一分鐘內還沒有出現可用訊息,GET CONVERSATION GROUP 便會傳回,而不改變 @conversation_group_id 的值。
DECLARE @conversation_group_id UNIQUEIDENTIFIER
WAITFOR (
GET CONVERSATION GROUP @conversation_group_id
FROM ExpenseQueue ),
TIMEOUT 60000 ;
C. 取得交談群組,立即傳回
這個範例會針對 ExpenseQueue 的下一則可用訊息,將 @conversation_group_id 設為交談群組識別碼。如果沒有可用訊息,GET CONVERSATION GROUP 便會立即傳回,而不變更 @conversation_group_id。
DECLARE @conversation_group_id UNIQUEIDENTIFIER ;
GET CONVERSATION GROUP @conversation_group_id
FROM AdventureWorks.dbo.ExpenseQueue ;
請參閱
參考
BEGIN DIALOG CONVERSATION (Transact-SQL)
MOVE CONVERSATION (Transact-SQL)