CREATE QUEUE (Transact-SQL)CREATE QUEUE (Transact-SQL)

ESTE TÓPICO APLICA-SE A:simSQL Server (a partir de 2008)nãoBanco de Dados SQL do Microsoft AzurenãoAzure SQL Data Warehouse nãoParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Cria uma fila nova em um banco de dados.Creates a new queue in a database. Enfileira mensagens de repositório.Queues store messages. Quando uma mensagem chega para um serviço, o Service BrokerService Broker coloca a mensagem na fila associada ao serviço.When a message arrives for a service, Service BrokerService Broker puts the message on the queue associated with the service.

Ícone de link do tópico Convenções da sintaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

CREATE QUEUE <object>  
   [ WITH  
     [ STATUS = { ON | OFF }  [ , ] ]  
     [ RETENTION = { ON | OFF } [ , ] ]   
     [ ACTIVATION (  
         [ STATUS = { ON | OFF } , ]   
           PROCEDURE_NAME = <procedure> ,  
           MAX_QUEUE_READERS = max_readers ,   
           EXECUTE AS { SELF | 'user_name' | OWNER }   
            ) [ , ] ]  
     [ POISON_MESSAGE_HANDLING (  
         [ STATUS = { ON | OFF } ] ) ] 
    ]  
     [ ON { filegroup | [ DEFAULT ] } ]  
[ ; ]  

<object> ::=  
{  
    [ database_name. [ schema_name ] . | schema_name. ]  
        queue_name  
}   

<procedure> ::=  
{  
    [ database_name. [ schema_name ] . | schema_name. ]  
        stored_procedure_name  
}  

ArgumentosArguments

Database_Name (object)database_name (object)
É o nome do banco de dados no qual criar a nova fila.Is the name of the database within which to create the new queue. Database_Name deve especificar o nome do banco de dados existente.database_name must specify the name of an existing database. Quando database_name não for fornecido, a fila é criada no banco de dados atual.When database_name is not provided, the queue is created in the current database.

schema_name (object)schema_name (object)
É o nome do esquema ao qual a nova fila pertence.Is the name of the schema to which the new queue belongs. O esquema considera como padrão o esquema padrão para o usuário que executa a instrução.The schema defaults to the default schema for the user that executes the statement. Se a instrução CREATE QUEUE for executada por um membro da função de servidor fixa sysadmin ou um membro do db_dbowner ou db_ddladmin banco de dados fixa no banco de dados especificado por database_name, schema_name pode especificar um esquema diferente daquele que está associado ao logon da conexão atual.If the CREATE QUEUE statement is executed by a member of the sysadmin fixed server role, or a member of the db_dbowner or db_ddladmin fixed database roles in the database specified by database_name, schema_name can specify a schema other than the one associated with the login of the current connection. Caso contrário, schema_name deve ser o esquema padrão do usuário que executa a instrução.Otherwise, schema_name must be the default schema for the user who executes the statement.

queue_namequeue_name
É o nome da fila a ser criada.Is the name of the queue to create. Esse nome deve satisfazer as diretrizes para identificadores do SQL ServerSQL Server.This name must meet the guidelines for SQL ServerSQL Server identifiers.

STATUS (Fila)STATUS (Queue)
Especifica se a fila está disponível (ON) ou indisponível (OFF).Specifies whether the queue is available (ON) or unavailable (OFF). Quando a fila estiver indisponível, nenhuma mensagem pode ser adicionada à fila ou removida dela.When the queue is unavailable, no messages can be added to the queue or removed from the queue. Você pode criar a fila em um estado indisponível para evitar que as mensagens cheguem à fila até que a fila seja tornada disponível com uma instrução ALTER QUEUE.You can create the queue in an unavailable state to keep messages from arriving on the queue until the queue is made available with an ALTER QUEUE statement. Se esta cláusula for omitida, o padrão será ON e a fila estará disponível.If this clause is omitted, the default is ON, and the queue is available.

RETENTIONRETENTION
Especifica a configuração de retenção para a fila.Specifies the retention setting for the queue. Se RETENTION = ON, todas as mensagens enviadas ou recebidas em conversas que usem essa fila serão retidas na fila até que as conversas tenham terminado.If RETENTION = ON, all messages sent or received on conversations that use this queue are retained in the queue until the conversations have ended. Isso lhe permite reter mensagens para propósitos de auditoria ou executar transações de compensação se um erro acontecer.This lets you retain messages for auditing purposes, or to perform compensating transactions if an error occurs. Se essa cláusula não for especificada, a configuração de retenção considerará OFF como padrão.If this clause is not specified, the retention setting defaults to OFF.

Observação

Definindo RETENÇÃO = ON pode diminuir o desempenho.Setting RETENTION = ON can decrease performance. Essa configuração só deveria ser usada se for requerida para o aplicativo.This setting should only be used if it is required for the application.

ACTIVATIONACTIVATION
Especifica informações sobre qual procedimento armazenado que você tem de começar a processar mensagens nesta fila.Specifies information about which stored procedure you have to start to process messages in this queue.

STATUS (Ativação)STATUS (Activation)
Especifica se o Service BrokerService Broker inicia o procedimento armazenado.Specifies whether Service BrokerService Broker starts the stored procedure. Quando o STATUS = ON, a fila começa o procedimento armazenado especificado com PROCEDURE_NAME quando o número de procedimentos atualmente sendo executados for menos que MAX_QUEUE_READERS e quando as mensagens chegarem à fila mais rápido do que os procedimentos armazenados recebam as mensagens.When STATUS = ON, the queue starts the stored procedure specified with PROCEDURE_NAME when the number of procedures currently running is less than MAX_QUEUE_READERS and when messages arrive on the queue faster than the stored procedures receive messages. Quando o STATUS = OFF, a fila não inicia o procedimento armazenado.When STATUS = OFF, the queue does not start the stored procedure. Se essa cláusula não for especificada, o padrão será ON.If this clause is not specified, the default is ON.

PROCEDURE_NAME = <procedure>PROCEDURE_NAME = <procedure>
Especifica o nome do procedimento armazenado para começar a processar as mensagens nessa fila.Specifies the name of the stored procedure to start to process messages in this queue. Esse valor deve ser um identificador do SQL ServerSQL Server.This value must be a SQL ServerSQL Server identifier.

database_name(procedure)database_name(procedure)
É o nome do banco de dados que contém o procedimento armazenado.Is the name of the database that contains the stored procedure.

schema_name(procedure)schema_name(procedure)
É o nome do esquema que contém o procedimento armazenado.Is the name of the schema that contains the stored procedure.

procedure_nameprocedure_name
É o nome do procedimento armazenado.Is the name of the stored procedure.

MAX_QUEUE_READERS =max_readersMAX_QUEUE_READERS =max_readers
Especifica o número máximo de instâncias do procedimento armazenado de ativação que a fila inicia ao mesmo tempo.Specifies the maximum number of instances of the activation stored procedure that the queue starts at the same time. O valor de max_readers deve ser um número entre 0 e 32767.The value of max_readers must be a number between 0 and 32767.

EXECUTE ASEXECUTE AS
Especifica a conta do usuário do banco de dados do SQL ServerSQL Server sob a qual é executado o procedimento armazenado de ativação.Specifies the SQL ServerSQL Server database user account under which the activation stored procedure runs. O SQL ServerSQL Server deve poder verificar as permissões deste usuário no momento em que a fila inicia o procedimento armazenado. SQL ServerSQL Server must be able to check the permissions for this user at the time that the queue starts the stored procedure. Para um usuário de domínio, o servidor deverá estar conectado ao domínio quando o procedimento armazenado for iniciado ou a ativação falhará.For a domain user, the server must be connected to the domain when the procedure is started or activation fails. Para um usuário do SQL ServerSQL Server, o servidor sempre pode verificar as permissões.For a SQL ServerSQL Server user, the server can always check permissions.

SELFSELF
Especifica que o procedimento armazenado é executado como o usuário atual.Specifies that the stored procedure executes as the current user. (O principal do banco de dados que executa esta instrução CREATE QUEUE.)(The database principal executing this CREATE QUEUE statement.)

'user_name''user_name'
É o nome do usuário que o procedimento armazenado usa para ser executado.Is the name of the user who the stored procedure executes as. O user_name parâmetro deve ser um válido SQL ServerSQL Server especificado pelo usuário como um SQL ServerSQL Server identificador.The user_name parameter must be a valid SQL ServerSQL Server user specified as a SQL ServerSQL Server identifier. O usuário atual deve ter a permissão IMPERSONATE para o user_name especificado.The current user must have IMPERSONATE permission for the user_name specified.

OWNEROWNER
Especifica que o procedimento armazenado é executado como o proprietário da fila.Specifies that the stored procedure executes as the owner of the queue.

POISON_MESSAGE_HANDLINGPOISON_MESSAGE_HANDLING
Especifica se a manipulação de mensagens suspeitas está habilitada para a fila.Specifies whether poison message handling is enabled for the queue. O padrão é ON.The default is ON.

A fila que tiver a manipulação de mensagens suspeitas definida como OFF, não será desabilitada após cinco reversões consecutivas de transações.A queue that has poison message handling set to OFF will not be disabled after five consecutive transaction rollbacks. Isso permite que um sistema personalizado de manipulação de mensagens suspeitas seja definido pelo aplicativo.This allows for a custom poison message handing system to be defined by the application.

ON arquivos | [Padrão]ON filegroup | [DEFAULT]
Especifica o grupo de arquivos do SQL ServerSQL Server no qual criar esta fila.Specifies the SQL ServerSQL Server filegroup on which to create this queue. Você pode usar o arquivos parâmetro para identificar um grupo de arquivos, ou use o identificador padrão para usar o grupo de arquivos padrão para o banco de dados do service broker.You can use the filegroup parameter to identify a filegroup, or use the DEFAULT identifier to use the default filegroup for the service broker database. No contexto desta cláusula, DEFAULT não é uma palavra-chave e deve ser delimitado como um identificador.In the context of this clause, DEFAULT is not a keyword, and must be delimited as an identifier. Quando nenhum grupo de arquivos for especificado, a fila usará o grupo de arquivos padrão para o banco de dados.When no filegroup is specified, the queue uses the default filegroup for the database.

RemarksRemarks

Uma fila pode ser o destino de uma instrução SELECT.A queue can be the target of a SELECT statement. Entretanto, os conteúdos de uma fila só podem ser modificados usando instruções que operam em conversas do Service BrokerService Broker, tais como SEND, RECEIVE e END CONVERSATION.However, the contents of a queue can only be modified using statements that operate on Service BrokerService Broker conversations, such as SEND, RECEIVE, and END CONVERSATION. Uma fila não pode ser o destino de uma instrução INSERT, UPDATE, DELETE ou TRUNCATE.A queue cannot be the target of an INSERT, UPDATE, DELETE, or TRUNCATE statement.

Uma fila pode não ser um objeto temporário.A queue might not be a temporary object. Portanto, a fila de nomes que começam com # não são válidos.Therefore, queue names starting with # are not valid.

Criando uma fila em um estado inativo lhe permite ter a infraestrutura pronta para um serviço antes de permitir que as mensagens sejam recebidas na fila.Creating a queue in an inactive state lets you get the infrastructure in place for a service before allowing messages to be received on the queue.

O Service BrokerService Broker não parará os procedimentos armazenados de ativação quando não houver nenhuma mensagem na fila. Service BrokerService Broker does not stop activation stored procedures when there are no messages on the queue. Um procedimento armazenado de ativação deveria sair quando nenhuma mensagem estiver disponível na fila por um período de tempo curto.An activation stored procedure should exit when no messages are available on the queue for a short time.

As permissões para um procedimento armazenado de ativação são verificadas quando o Service BrokerService Broker iniciar o procedimento armazenado, não quando a fila for criada.Permissions for the activation stored procedure are checked when Service BrokerService Broker starts the stored procedure, not when the queue is created. A instrução CREATE QUEUE não verifica que o usuário especificado na cláusula EXECUTE AS tem permissão para executar o procedimento armazenado especificado na cláusula PROCEDURE NAME.The CREATE QUEUE statement does not verify that the user specified in the EXECUTE AS clause has permission to execute the stored procedure specified in the PROCEDURE NAME clause.

Quando uma fila não está disponível, o Service BrokerService Broker mantém as mensagens para os serviços que usam a fila na transmissão para o banco de dados.When a queue is unavailable, Service BrokerService Broker holds messages for services that use the queue in the transmission queue for the database. A exibição do catálogo sys.transmission_queue fornece uma exibição da fila de transmissão.The sys.transmission_queue catalog view provides a view of the transmission queue.

Uma fila é um objeto possuído por esquema.A queue is a schema-owned object. As filas aparecem na exibição do catálogo sys.objects.Queues appear in the sys.objects catalog view.

A tabela a seguir lista as colunas em uma fila.The following table lists the columns in a queue.

Nome da colunaColumn name Tipo de dadosData type DescriptionDescription
statusstatus tinyinttinyint Status da mensagem.Status of the message. A instrução RECEIVE retornará todas as mensagens que têm um status de 1.The RECEIVE statement returns all messages that have a status of 1. Se a retenção de mensagens estiver ativada, o status será definido como 0.If message retention is on, the status is then set to 0. Se a retenção de mensagens estiver desativada, a mensagem será excluída da fila.If message retention is off, the message is deleted from the queue. As mensagens na fila podem conter um dos seguintes valores:Messages in the queue can contain one of the following values:

0= mensagem recebida retida0=Retained received message

1= pronto para receber1=Ready to receive

2= ainda não concluída2=Not yet complete

3= mensagem enviada retida3=Retained sent message
prioritypriority tinyinttinyint O nível de prioridade atribuído a essa mensagem.The priority level that is assigned to this message.
queuing_orderqueuing_order bigintbigint Número da ordem da mensagem na fila.Message order number in the queue.
conversation_group_idconversation_group_id uniqueidentifieruniqueidentifier O identificador do grupo de conversa a que pertence essa mensagem.Identifier for the conversation group that this message belongs to.
conversation_handleconversation_handle uniqueidentifieruniqueidentifier Tratamento para a conversa da qual essa mensagem faz parte.Handle for the conversation that this message is part of.
message_sequence_numbermessage_sequence_number bigintbigint Número de sequência da mensagem na conversa.Sequence number of the message in the conversation.
service_nameservice_name nvarchar(512)nvarchar(512) O nome do serviço a que se destina a conversa.Name of the service that the conversation is to.
service_idservice_id Intint Identificador de objeto do SQL ServerSQL Server do serviço para o qual a conversa é destinada. SQL ServerSQL Server object identifier of the service that the conversation is to.
service_contract_nameservice_contract_name nvarchar(256)nvarchar(256) O nome do contrato que a conversa segue.Name of the contract that the conversation follows.
service_contract_idservice_contract_id Intint Identificador de objeto do SQL ServerSQL Server do contrato que a conversa segue. SQL ServerSQL Server object identifier of the contract that the conversation follows.
message_type_namemessage_type_name nvarchar(256)nvarchar(256) O nome do tipo de mensagem a que descreve a mensagem.Name of the message type that describes the message.
message_type_idmessage_type_id Intint Identificador de objeto do SQL ServerSQL Server do tipo de mensagem que descreve a mensagem. SQL ServerSQL Server object identifier of the message type that describes the message.
validationvalidation nchar(2)nchar(2) Validação usada para a mensagem.Validation used for the message.

E = VazioE=Empty

N = NenhumN=None

X=XMLX=XML
message_bodymessage_body varbinary(max)varbinary(max) Conteúdo da mensagem.Content of the message.
message_idmessage_id uniqueidentifieruniqueidentifier Identificador exclusivo para a mensagem.Unique identifier for the message.

PermissõesPermissions

Permissão para criar uma fila usa os membros da função de banco de dados fixa db_ddladmin ou db_owner e a função de servidor fixa sysadmin.Permission for creating a queue uses members of the db_ddladmin or db_owner fixed database roles and the sysadmin fixed server role.

A permissão para alterar uma rota assume como padrão o proprietário da rota, os membros das funções de banco de dados fixas db_ddladmin ou db_owner e os membros da função de servidor fixa sysadmin.REFERENCES permission for a queue defaults to the owner of the queue, members of the db_ddladmin or db_owner fixed database roles, and members of the sysadmin fixed server role.

A permissão RECEIVE para uma fila que tem como padrão o proprietário da fila, os membros da função de banco de dados fixa db_owner e os membros da função de servidor fixa sysadmin.RECEIVE permission for a queue defaults to the owner of the queue, members of the db_owner fixed database role, and members of the sysadmin fixed server role.

ExemplosExamples

A.A. Criando uma fila sem parâmetrosCreating a queue with no parameters

O exemplo seguinte cria uma fila que está disponível para receber mensagens.The following example creates a queue that is available to receive messages. Nenhum procedimento armazenado de ativação é especificado para a fila.No activation stored procedure is specified for the queue.

CREATE QUEUE ExpenseQueue ;  

B.B. Criando uma fila indisponívelCreating an unavailable queue

O exemplo seguinte cria uma fila que está indisponível para receber mensagens.The following example creates a queue that is unavailable to receive messages. Nenhum procedimento armazenado de ativação é especificado para a fila.No activation stored procedure is specified for the queue.

CREATE QUEUE ExpenseQueue WITH STATUS=OFF ;  

C.C. Criando uma fila e especificando informações de ativação internasCreating a queue and specify internal activation information

O exemplo seguinte cria uma fila que está disponível para receber mensagens.The following example creates a queue that is available to receive messages. A fila inicia o procedimento armazenado expense_procedure quando uma mensagem entrar na fila.The queue starts the stored procedure expense_procedure when a message enters the queue. O procedimento armazenado executa como o usuário ExpenseUser.The stored procedure executes as the user ExpenseUser. A fila inicia um máximo de 5 instâncias do procedimento armazenado.The queue starts a maximum of 5 instances of the stored procedure.

CREATE QUEUE ExpenseQueue  
    WITH STATUS=ON,  
    ACTIVATION (  
        PROCEDURE_NAME = expense_procedure,  
        MAX_QUEUE_READERS = 5,  
        EXECUTE AS 'ExpenseUser' ) ;  

D.D. Criando uma fila em um grupo de arquivos específicoCreating a queue on a specific filegroup

O exemplo a seguir cria uma fila no grupo de arquivos ExpenseWorkFileGroup.The following example creates a queue on the filegroup ExpenseWorkFileGroup.

CREATE QUEUE ExpenseQueue  
    ON ExpenseWorkFileGroup ;  

E.E. Criando uma fila com vários parâmetrosCreating a queue with multiple parameters

O exemplo a seguir cria uma fila no DEFAULT grupo de arquivos.The following example creates a queue on the DEFAULT filegroup. A fila está indisponível.The queue is unavailable. As mensagens são retidas na fila até que a conversa a que elas pertençam termine.Messages are retained in the queue until the conversation that they belong to ends. Quando a fila for deixada disponível por ALTER QUEUE, a fila inicia o procedimento armazenado 2008R2.dbo.expense_procedure para processar as mensagens.When the queue is made available through ALTER QUEUE, the queue starts the stored procedure 2008R2.dbo.expense_procedure to process messages. O procedimento armazenado executa como o usuário que executou a instrução CREATE QUEUE.The stored procedure executes as the user who ran the CREATE QUEUE statement. A fila inicia um máximo de 10 instâncias do procedimento armazenado.The queue starts a maximum of 10 instances of the stored procedure.

CREATE QUEUE ExpenseQueue  
    WITH STATUS = OFF,  
      RETENTION = ON,  
      ACTIVATION (  
          PROCEDURE_NAME = AdventureWorks2012.dbo.expense_procedure,  
          MAX_QUEUE_READERS = 10,  
          EXECUTE AS SELF )  
    ON [DEFAULT] ;  

Consulte tambémSee Also

ALTER QUEUE (Transact-SQL) ALTER QUEUE (Transact-SQL)
CREATE SERVICE (Transact-SQL) CREATE SERVICE (Transact-SQL)
DROP QUEUE (Transact-SQL) DROP QUEUE (Transact-SQL)
RECEIVE (Transact-SQL) RECEIVE (Transact-SQL)
EVENTDATA (Transact-SQL)EVENTDATA (Transact-SQL)