CREATE MESSAGE TYPE (Transact-SQL)
Erstellt einen neuen Nachrichtentyp. Mit einem Nachrichtentyp wird der Name einer Nachricht und die Überprüfung festgelegt, die Service Broker für Nachrichten mit diesem Namen ausführt. Auf beiden Seiten einer Konversation müssen dieselben Nachrichtentypen definiert sein.
Syntax
CREATE MESSAGE TYPE message_type_name
[ AUTHORIZATION owner_name ]
[ VALIDATION = { NONE
| EMPTY
| WELL_FORMED_XML
| VALID_XML WITH SCHEMA COLLECTION
schema_collection_name
} ]
[ ; ]
Argumente
message_type_name
Der Name des Nachrichtentyps, der erstellt werden soll. Ein neuer Nachrichtentyp wird in der aktuellen Datenbank erstellt, sein Besitzer ist der in der AUTHORIZATION-Klausel angegebene Prinzipal. Server-, Datenbank- und Schemaname können nicht angegeben werden. message_type_name kann bis zu 128 Zeichen enthalten.AUTHORIZATION owner_name
Legt den Besitzer des Nachrichtentyps auf den angegebenen Datenbankbenutzer oder die angegebene Datenbankrolle fest. Ist der aktuelle Benutzer dbo oder sa, kann owner_name der Name eines beliebigen gültigen Benutzers bzw. einer beliebigen gültigen Rolle sein. Andernfalls muss owner_name der Name des aktuellen Benutzers, der Name eines Benutzers, für den der aktuelle Benutzer die IMPERSONATE-Berechtigung besitzt, oder der Name einer Rolle sein, der der aktuelle Benutzer angehört. Wird diese Klausel nicht angegeben, ist der Nachrichtentyp im Besitz des aktuellen Benutzers.VALIDATION
Gibt an, wie Service Broker den Nachrichtentext für Nachrichten von diesem Typ überprüft. Wird diese Klausel nicht angegeben, ist die Standardeinstellung NONE.NONE
Gibt an, dass keine Überprüfung erfolgt. Der Nachrichtentext kann beliebige Daten enthalten oder NULL sein.EMPTY
Gibt an, dass der Nachrichtentext NULL sein muss.WELL_FORMED_XML
Gibt an, dass der Nachrichtentext wohlgeformte XML-Daten enthalten muss.VALID_XML WITH SCHEMA COLLECTION schema_collection_name
Gibt an, dass der Nachrichtentext XML-Daten enthalten muss, die einem Schema in der angegebenen Schemaauflistung entsprechen. schema_collection_name muss der Name einer vorhandenen XML-Schemaauflistung sein.
Hinweise
Service Broker überprüft eingehende Nachrichten. Enthält eine Nachricht Text, der nicht dem angegebenen Überprüfungstyp entspricht, verwirft Service Broker die ungültige Nachricht und gibt eine Fehlermeldung an den Dienst zurück, der die Nachricht gesendet hat.
Auf beiden Seiten einer Konversation muss derselbe Name für einen Nachrichtentyp definiert sein. Zur Vereinfachung der Problembehandlung geben beide Seiten einer Konversation in der Regel die gleiche Überprüfung für den Nachrichtentyp an, obwohl Service Broker dies nicht voraussetzt.
Ein Nachrichtentyp kann kein temporäres Objekt sein. Namen von Nachrichtentypen, die mit # beginnen, sind zulässig. Hierbei handelt es sich jedoch um dauerhafte Objekte.
Berechtigungen
Über die Berechtigung zum Erstellen eines Nachrichtentyps verfügen standardmäßig Mitglieder der festen Datenbankrollen db_ddladmin und db_owner sowie der festen Serverrolle sysadmin.
Über die REFERENCES-Berechtigung für einen Nachrichtentyp verfügen standardmäßig der Besitzer des Nachrichtentyps, die Mitglieder der festen Datenbankrolle db_owner und die Mitglieder der festen Serverrolle sysadmin.
Wenn in der CREATE MESSAGE TYPE-Anweisung eine Schemaauflistung angegeben ist, muss der Benutzer, der die Anweisung ausführt, über die REFERENCES-Berechtigung in der angegebenen Schemaauflistung verfügen.
Beispiele
A. Erstellen eines Nachrichtentyps mit wohlgeformten XML-Daten
Im folgenden Beispiel wird ein neuer Nachrichtentyp erstellt, der wohlgeformte XML-Daten enthält.
CREATE MESSAGE TYPE
[//Adventure-Works.com/Expenses/SubmitExpense]
VALIDATION = WELL_FORMED_XML ;
B. Erstellen eines Nachrichtentyps mit typisierten XML-Daten
Im folgenden Beispiel wird ein Nachrichtentyp für einen Ausgabenbericht erstellt, der in XML verschlüsselt ist. Es wird eine XML-Schemaauflistung erstellt, die das Schema für einen einfachen Ausgabenbericht enthält. Anschließend wird ein neuer Nachrichtentyp erstellt, der Nachrichten mithilfe des Schemas überprüft.
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. Erstellen eines Nachrichtentyps für eine leere Nachricht
Im folgenden Beispiel wird ein neuer Nachrichtentyp mit leerer Verschlüsselung erstellt.
CREATE MESSAGE TYPE
[//Adventure-Works.com/Expenses/SubmitExpense]
VALIDATION = EMPTY ;
D. Erstellen eines Nachrichtentyps mit Binärdaten
Im folgenden Beispiel wird ein neuer Nachrichtentyp erstellt, der Binärdaten enthalten soll. Da in der Nachricht keine XML-Daten enthalten sind, wird der Überprüfungstyp vom Nachrichtentyp auf NONE festgelegt. Beachten Sie, dass in diesem Fall die Anwendung, die eine Nachricht von diesem Typ empfängt, überprüfen muss, dass die Nachricht Daten enthält und dass die Daten vom erwarteten Typ sind.
CREATE MESSAGE TYPE
[//Adventure-Works.com/Expenses/ReceiptImage]
VALIDATION = NONE ;