Filas de consulta

Aplica-se a:SQL ServerAzure SQL Managed Instance

Às vezes, pode ser necessário inspecionar o conteúdo de uma fila como um todo. Talvez você queira saber quantas mensagens a fila contém, ou talvez queira garantir que o aplicativo processou todas as mensagens para um serviço que você está prestes a colocar offline. Talvez seja necessário descobrir por que as mensagens não estão sendo processadas por um aplicativo.

Para obter essas informações, use o nome da fila como a tabela de origem de uma SELECT instrução. Uma SELECT instrução numa fila tem o mesmo formato que uma SELECT instrução numa vista ou tabela.

Observação

O Service Broker foi projetado para permitir que vários leitores de filas recebam mensagens de uma fila com eficiência. No entanto, uma SELECT instrução numa fila pode causar bloqueamento. Ao usar uma SELECT instrução em uma fila, especifique a dica NOLOCK para evitar o bloqueio de aplicativos que usam a fila. Para obter uma descrição das colunas em uma fila, consulte CREATE QUEUE.

A seguir está um exemplo SELECT de instrução para descobrir o número de mensagens na fila ExpenseQueue:

SELECT COUNT(*)
FROM dbo.ExpenseQueue WITH (NOLOCK);

A instrução a seguir SELECT permite que o administrador saiba se a fila ExpenseQueue contém alguma mensagem para o serviço 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';

O Service Broker gere atualizações das filas. Embora o nome de uma fila possa ser usado no lugar de um nome de tabela numa SELECT declaração, uma fila não pode ser o destino de uma INSERT, UPDATE, DELETE ou TRUNCATE declaração. O SQL Server não permite que os usuários criem índices em filas.