CREATE MESSAGE TYPE (Transact-SQL)

Cria um novo tipo de mensagem. Um tipo de mensagem define o nome de uma mensagem e a validação que o Service Broker executa nas mensagens com esse nome. Os dois lados de uma conversação devem definir os mesmos tipos de mensagem.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

CREATE MESSAGE TYPE message_type_name
    [ AUTHORIZATION owner_name ]
    [ VALIDATION = {  NONE
                    | EMPTY 
                    | WELL_FORMED_XML
                    | VALID_XML WITH SCHEMA COLLECTION 
                                                    schema_collection_name
                   } ]
[ ; ]

Argumentos

  • message_type_name
    É o nome do tipo de mensagem a ser criado. Um novo tipo de mensagem é criado no banco de dados atual e é de propriedade do principal especificado na cláusula AUTHORIZATION. Os nomes de servidor, banco de dados e esquema não podem ser especificados. O message_type_name pode ter até 128 caracteres.

  • AUTHORIZATION owner_name
    Define o proprietário do tipo de mensagem como o usuário ou a função do banco de dados especificado. Quando o usuário atual for dbo ou sa, owner_name poderá ser o nome de qualquer usuário ou função válida. Caso contrário, o owner_name deverá ser o nome do usuário atual, o nome de um usuário para o qual o usuário atual tenha a permissão IMPERSONATE ou o nome de uma função à qual o usuário atual pertença. Quando esta cláusula é omitida, o tipo de mensagem pertence ao usuário atual.

  • VALIDATION
    Especifica como o Service Broker valida o corpo da mensagem para mensagens desse tipo. Quando esta cláusula não é especificada, a validação assume NONE como padrão.

  • NONE
    Especifica que nenhuma validação é executada. O corpo da mensagem pode conter dados ou pode ser NULL.

  • EMPTY
    Especifica que o corpo da mensagem deve ser NULL.

  • WELL_FORMED_XML
    Especifica que o corpo da mensagem deve conter XML bem formado.

  • VALID_XML WITH SCHEMA COLLECTION schema_collection_name
    Especifica que o corpo da mensagem deve conter XML que obedeça ao um esquema na coleção de esquemas especificada. O schema_collection_name deve ser o nome de uma coleção de esquema XML existente.

Comentários

O Service Broker valida mensagens de entrada. Quando uma mensagem contém um corpo de mensagem que não obedece ao tipo de validação especificado, o Service Broker descarta a mensagem inválida e retorna uma mensagem de erro ao serviço que enviou a mensagem.

Os dois lados de uma conversação devem definir o mesmo nome para um tipo de mensagem. Para ajudar a solucionar problemas, os dois lados de uma conversação normalmente especificam a mesma validação para o tipo de mensagem, embora o Service Broker não exija que os dois lados da conversação usem a mesma validação.

Um tipo de mensagem não pode ser um objeto temporário. Nomes de tipo da mensagem que começam com # são permitidos, mas são objetos permanentes.

Permissões

A permissão para criar um tipo de mensagem assume como padrão os membros das funções de banco de dados fixas db_ddladmin ou db_owner e da função de servidor fixa sysadmin.

A permissão REFERENCES para um tipo de mensagem assume como padrão o proprietário do tipo de mensagem, os membros da função de banco de dados fixa db_owner e membros da função de servidor fixa sysadmin.

Quando a instrução CREATE MESSAGE TYPE especifica uma coleção de esquema, o usuário que executa a instrução deve ter a permissão REFERENCES na coleção de esquema especificada.

Exemplos

A. Criando um tipo de mensagem que contém XML bem formado

O exemplo a seguir cria um novo tipo de mensagem que contém XML bem formado.

  CREATE MESSAGE TYPE
    [//Adventure-Works.com/Expenses/SubmitExpense]
    VALIDATION = WELL_FORMED_XML ;   

B. Criando um tipo de mensagem que contém XML com tipo

O exemplo a seguir cria um tipo de mensagem para um relatório de despesas codificado em XML. Ele cria uma coleção de esquema XML que contém o esquema para um relatório de despesas simples. Ele também cria um novo tipo de mensagem que valida mensagens no esquema.

CREATE XML SCHEMA COLLECTION ExpenseReportSchema AS
N'<?xml version="1.0" encoding="UTF-16" ?>
  <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     targetNamespace="http://Adventure-Works.com/schemas/expenseReport"
     xmlns:expense="http://Adventure-Works.com/schemas/expenseReport"
     elementFormDefault="qualified"
   > 
    <xsd:complexType name="expenseReportType">
       <xsd:sequence>
         <xsd:element name="EmployeeName" type="xsd:string"/>
         <xsd:element name="EmployeeID" type="xsd:string"/>
         <xsd:element name="ItemDetail"
           type="expense:ItemDetailType" maxOccurs="unbounded"/>
      </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="ItemDetailType">
      <xsd:sequence>
        <xsd:element name="Date" type="xsd:date"/>
        <xsd:element name="CostCenter" type="xsd:string"/>
        <xsd:element name="Total" type="xsd:decimal"/>
        <xsd:element name="Currency" type="xsd:string"/>
        <xsd:element name="Description" type="xsd:string"/>
      </xsd:sequence>
    </xsd:complexType>

    <xsd:element name="ExpenseReport" type="expense:expenseReportType"/>

  </xsd:schema>' ;


  CREATE MESSAGE TYPE
    [//Adventure-Works.com/Expenses/SubmitExpense]
    VALIDATION = VALID_XML WITH SCHEMA COLLECTION ExpenseReportSchema ;

C. Criando um tipo de mensagem para uma mensagem vazia

O exemplo a seguir cria um novo tipo de mensagem com codificação vazia.

 CREATE MESSAGE TYPE
     [//Adventure-Works.com/Expenses/SubmitExpense]
     VALIDATION = EMPTY ;

D. Criando um tipo de mensagem que contém dados binários

O exemplo a seguir cria um novo tipo de mensagem para conter dados binários. Como a mensagem terá dados que não são XML, o tipo de mensagem especifica um tipo de validação de NONE. Observe que, neste caso, o aplicativo que recebe uma mensagem desse tipo deve verificar se ela contém dados e se os dados são do tipo esperado.

CREATE MESSAGE TYPE
    [//Adventure-Works.com/Expenses/ReceiptImage]
    VALIDATION = NONE ;