GET CONVERSATION GROUP (Transact-SQL)
適用於:SQL Server Azure SQL 受控執行個體
針對下一則要接收的訊息,傳回交談群組識別碼,並且針對含有該訊息的交談,鎖定交談群組。 您可以利用交談群組識別碼,先擷取交談狀態資訊,再擷取訊息本身。
語法
[ WAITFOR ( ]
GET CONVERSATION GROUP @conversation_group_id
FROM <queue>
[ ) ] [ , TIMEOUT timeout ]
[ ; ]
<queue> ::=
{ database_name.schema_name.queue_name | schema_name.queue_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. 取得交談群組,無限期等候
下列範例會將 @conversation_group_id
設定為 ExpenseQueue
中下一個可用訊息的交談群組識別碼。 命令會等到訊息成為可用訊息為止。
DECLARE @conversation_group_id UNIQUEIDENTIFIER ;
WAITFOR (
GET CONVERSATION GROUP @conversation_group_id
FROM ExpenseQueue
) ;
B. 取得交談群組,等候一分鐘
下列範例會將 @conversation_group_id
設定為 ExpenseQueue
中下一個可用訊息的交談群組識別碼。 如果一分鐘內還沒有出現可用訊息,GET CONVERSATION GROUP 便會傳回,而不改變 @conversation_group_id
的值。
DECLARE @conversation_group_id UNIQUEIDENTIFIER
WAITFOR (
GET CONVERSATION GROUP @conversation_group_id
FROM ExpenseQueue ),
TIMEOUT 60000 ;
C. 取得交談群組,立即傳回
下列範例會將 @conversation_group_id
設定為 ExpenseQueue
中下一個可用訊息的交談群組識別碼。 如果沒有可用訊息,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)