CREATE MESSAGE TYPE (Transact-SQL)

Aplica-se a: SQL ServerAzure SQL Managed Instance

Cria um novo tipo de mensagem. Um tipo de mensagem define o nome de uma mensagem e a validação que o Service Broker realiza em mensagens que tenham esse nome. Ambos os lados de uma conversa devem definir os mesmos tipos de mensagens.

Transact-SQL convenções de sintaxe

Sintaxe

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

Arguments

message_type_name
É o nome do tipo de mensagem a criar. Um novo tipo de mensagem é criado na base de dados atual e pertence ao principal especificado na AUTHORIZATION cláusula. Nomes de servidores, bases de dados e esquemas não podem ser especificados. A message_type_name pode ter até 128 caracteres.

AUTHORIZATION owner_name
Define o proprietário do tipo de mensagem para o utilizador ou papel especificado na base de dados. Quando o utilizador atual é dbo ou sa, owner_name pode ser o nome de qualquer utilizador ou função válida. Caso contrário, owner_name deve ser o nome do utilizador atual, o nome de um utilizador para quem o utilizador atual tem permissão de PERSONIFICAÇÃO, ou o nome de uma função a que o utilizador atual pertence. Quando esta cláusula é omitida, o tipo de mensagem pertence ao utilizador atual.

VALIDAÇÃO
Especifica como o Service Broker valida o corpo da mensagem para mensagens deste tipo. Quando esta cláusula não é especificada, a validação passa por defeito a NENHUMA.

NONE
Especifica que não é realizada qualquer validação. 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 COM SCHEMACOBRANÇA schema_collection_name
Especifica que o corpo da mensagem deve conter XML que cumpra um esquema na coleção de esquemas especificada. O schema_collection_name deve ser o nome de uma coleção de esquemas XML existente.

Remarks

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

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

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

Permissions

A permissão para criar um tipo de mensagem passa por defeito aos membros do db_ddladmin ou db_owner papéis fixos de base de dados e ao sysadmin função fixa de servidor.

A permissão REFERENCES para um tipo de mensagem corresponde por defeito ao proprietário do tipo de mensagem, aos membros do db_owner papel fixo na base de dados e aos membros do papel de servidor fixo sysadmin .

Quando a CREATE MESSAGE TYPE instrução especifica uma coleção de esquemas, o utilizador que executa a instrução deve ter permissão REFERENCES sobre a coleção de esquemas especificada.

Examples

A. Criação de um tipo de mensagem contendo XML bem formado

O exemplo seguinte 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. Criação de um tipo de mensagem contendo XML tipado

O exemplo seguinte cria um tipo de mensagem para um relatório de despesas codificado em XML. O exemplo cria uma coleção de esquemas XML que armazena o esquema para um simples relatório de despesas. O exemplo cria então um novo tipo de mensagem que valida mensagens contra o 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="https://Adventure-Works.com/schemas/expenseReport"  
     xmlns:expense="https://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. Criação de um tipo de mensagem para uma mensagem vazia

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

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

D. Criação de um tipo de mensagem contendo dados binários

O exemplo seguinte cria um novo tipo de mensagem para armazenar dados binários. Como a mensagem conterá dados que não são XML, o tipo de mensagem especifica um tipo de validação de NONE. Note que, neste caso, a aplicação que recebe uma mensagem deste tipo deve verificar que a mensagem contém dados e que os dados são do tipo esperado.

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

Ver também

ALTER MESSAGE TYPE (Transact-SQL)
DROP MESSAGE TYPE (Transact-SQL)
EVENTDATA (Transact-SQL)