有时可能需要检查整个队列的内容。 你可能想要知道队列包含多少条消息,或者你可能希望确保应用程序已处理即将脱机的服务的所有消息。 可能需要了解应用程序未处理消息的原因。
要获取此信息,请将队列名称用作SELECT语句的源表。
SELECT队列上的语句的格式与SELECT视图或表上的语句的格式相同。
注意
Service Broker 设计为支持多个队列读取器高效地从一个队列接收消息。 但是, SELECT 队列上的语句可能会导致阻塞。 在队列上使用 SELECT 语句时,请指定 NOLOCK 提示以避免阻止使用该队列的应用程序。 有关队列中列的说明,请参阅 CREATE QUEUE。
下面是一个示例 SELECT 语句,用于找出队列 ExpenseQueue 中的消息数:
SELECT COUNT(*)
FROM dbo.ExpenseQueue WITH (NOLOCK);
以下 SELECT 语句使管理员可以了解队列 ExpenseQueue 是否含有针对服务 //Adventure-Works.com/AccountsPayable/Expenses 的任何消息:
IF EXISTS (SELECT *
FROM dbo.ExpenseQueue WITH (NOLOCK)
WHERE service_name = '//Adventure-Works.com/AccountsPayable/Expenses')
PRINT 'The queue contains messages for ' + '//Adventure-Works.com/AccountsPayable/Expenses';
ELSE
PRINT 'The queue does not contain messages for ' + '//Adventure-Works.com/AccountsPayable/Expenses';
Service Broker 管理队列更新。 尽管队列的名称可用于代替语句中的SELECT表名,但队列不能是某个INSERT、UPDATE或DELETETRUNCATE语句的目标。 SQL Server 不允许用户在队列上创建索引。