CREATE MESSAGE TYPE (Transact-SQL)

Crea un nuovo tipo di messaggio. Il tipo di messaggio definisce il nome di un messaggio e la convalida che viene eseguita da Service Broker sui messaggi con tale nome. In entrambi i lati di una conversazione devono essere definiti gli stessi tipi di messaggio.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

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

Argomenti

  • message_type_name
    Nome del tipo di messaggio da creare. Viene creato un nuovo tipo di messaggio nel database corrente, di proprietà dell'entità specificata nella clausola AUTHORIZATION. Non è possibile specificare i nomi del server, del database e dello schema. Il valore di message_type_name può contenere fino a 128 caratteri.
  • AUTHORIZATION owner_name
    Imposta come proprietario del tipo di messaggio l'utente o il ruolo del database specificato. Se l'utente corrente è dbo o sa, owner_name può essere il nome di qualsiasi utente o ruolo valido. In caso contrario, owner_name deve corrispondere al nome dell'utente corrente, al nome di un utente per il quale l'utente corrente dispone di autorizzazione IMPERSONATE oppure al nome di un ruolo a cui appartiene l'utente corrente. Se questa clausola viene omessa, il tipo di messaggio appartiene all'utente corrente.
  • VALIDATION
    Specifica la modalità con cui Service Broker convalida il corpo dei messaggi di questo tipo. Se questa clausola non viene specificata, l'impostazione predefinita per la convalida è NONE.
  • NONE
    Specifica che non viene eseguita alcuna convalida. Il corpo del messaggio può contenere qualsiasi dato oppure può essere NULL.
  • EMPTY
    Specifica che il corpo del messaggio deve essere NULL.
  • WELL_FORMED_XML
    Specifica che il corpo del messaggio deve contenere codice XML in formato corretto.
  • VALID_XML WITH SCHEMA COLLECTION schema_collection_name
    Specifica che il corpo del messaggio deve contenere XML conforme a uno schema dell'insieme di schemi specificato. schema_collection_name deve corrispondere al nome di un insieme di schemi XML esistente.

Osservazioni

Service Broker convalida i messaggi in arrivo. Se il corpo di un messaggio non è conforme al tipo di convalida specificato, Service Broker elimina il messaggio non valido e restituisce un errore al servizio che ha inviato il messaggio.

In entrambi i lati di una conversazione deve essere definito lo stesso nome per un tipo di messaggio. Per semplificare la risoluzione dei problemi, per entrambi i lati di una conversazione viene in genere specificata la stessa convalida del tipo di messaggio, sebbene questo non sia un requisito di Service Broker.

Un tipo di messaggio non può essere un oggetto temporaneo. I nomi dei tipi di messaggio che iniziano con # sono consentiti, ma sono oggetti permanenti.

Autorizzazioni

L'autorizzazione per la creazione di un tipo di messaggio viene assegnata per impostazione predefinita ai membri del ruolo predefinito del database db_ddladmin o db_owner e al ruolo predefinito del server sysadmin.

Per impostazione predefinita l'autorizzazione REFERENCES per un tipo di messaggio viene assegnata al proprietario del tipo di messaggio, ai membri del ruolo predefinito del database db_owner e ai membri del ruolo predefinito del server sysadmin.

Se l'istruzione CREATE MESSAGE TYPE specifica un insieme di schemi, l'utente che esegue l'istruzione deve disporre dell'autorizzazione REFERENCES per l'insieme di schemi specificato.

Esempi

A. Creazione di un tipo di messaggio contenente codice XML ben formato

Nell'esempio seguente viene creato un nuovo tipo di messaggio contenente XML in formato corretto.

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

B. Creazione di un tipo di messaggio contenente codice XML tipizzato

Nell'esempio seguente viene creato un tipo di messaggio per un rapporto spese in codice XML. In questo esempio viene creato un insieme di schemi XML che contiene lo schema per un semplice rapporto spese. Viene quindi creato un nuovo tipo di messaggio che convalida i messaggi rispetto allo schema.

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. Creazione di un tipo di messaggio per un messaggio vuoto

Nell'esempio seguente viene creato un nuovo tipo di messaggio con codifica vuota.

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

D. Creazione di un tipo di messaggio contenente dati binari

Nell'esempio seguente viene creato un nuovo tipo di messaggio contenente dati binari. Poiché il messaggio conterrà dati non XML, per il tipo di messaggio viene specificato il tipo di convalida NONE. In questo caso l'applicazione che riceve un messaggio di questo tipo deve verificare che il messaggio contenga dati e che questi siano del tipo previsto.

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

Vedere anche

Riferimento

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

Altre risorse

Creazione di un insieme di schemi XML
Esercitazioni su Service Broker
Tipi di messaggi

Guida in linea e informazioni

Assistenza su SQL Server 2005