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.
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 ;