CREATE MESSAGE TYPE (Transact-SQL)
新しいメッセージ型を作成します。メッセージ型によって、メッセージの名前と、その名前の付いたメッセージに対し Service Broker が実行する検証方法が定義されます。メッセージ交換の両側で、同じメッセージ型を定義する必要があります。
構文
CREATE MESSAGE TYPE message_type_name [ AUTHORIZATION owner_name ] [ VALIDATION = { NONE | EMPTY | WELL_FORMED_XML | VALID_XML WITH SCHEMA COLLECTION schema_collection_name } ] [ ; ]
引数
- message_type_name
作成するメッセージ型の名前を指定します。新しいメッセージ型が現在のデータベースで作成され、AUTHORIZATION 句で指定されるプリンシパルによって所有されます。サーバー名、データベース名、スキーマ名は指定できません。message_type_name は半角 128 文字まで指定できます。
- AUTHORIZATION owner_name
メッセージ型の所有者を、指定したデータベース ユーザーまたはロールに設定します。現在のユーザーが dbo または sa の場合、owner_name には、任意の有効なユーザーまたはロールの名前を指定できます。それ以外の場合、owner_name には、現在のユーザーの名前、現在のユーザーの IMPERSONATE 権限に対応するユーザーの名前、または現在のユーザーが所属するロールの名前を指定する必要があります。この句を省略すると、メッセージ型は現在のユーザーに属します。
- VALIDATION
Service Broker によって、この型のメッセージの本文が検証される方法を指定します。この句を指定しない場合、検証は既定で NONE に設定されます。
- NONE
検証を実行しないことを指定します。メッセージの本文には何らかのデータが含まれているか、NULL の可能性があります。
- EMPTY
メッセージの本文は NULL にする必要があることを指定します。
- WELL_FORMED_XML
メッセージの本文に、整形式の XML が含まれている必要があることを指定します。
- VALID_XML WITH SCHEMA COLLECTION schema_collection_name
メッセージの本文に、指定されたスキーマ コレクション内のスキーマに準拠する XML が含まれている必要があることを指定します。schema_collection_name は、既存の XML スキーマ コレクションの名前にする必要があります。
解説
Service Broker では受信メッセージが検証されます。メッセージに、指定された検証型に準拠しないメッセージの本文が含まれている場合、Service Broker によって無効なメッセージが破棄され、メッセージを送信したサービスにエラー メッセージが返されます。
メッセージ交換の両側で、メッセージ型に同じ名前を定義する必要があります。Service Broker では、メッセージ交換の両側で同じ検証を使用する必要はありませんが、トラブルシューティングで役立つように、通常はメッセージ交換の両側でメッセージ型に同じ検証を指定します。
メッセージ型は一時オブジェクトとして指定できません。# で始まるメッセージ型名は許可されますが、パーマネント オブジェクトになります。
権限
メッセージ型を作成する権限は、既定では db_ddladmin 固定データベース ロールまたは db_owner 固定データベース ロールのメンバ、および sysadmin 固定サーバー ロールのメンバに与えられています。
メッセージ型に対する REFERENCES 権限は、既定では、メッセージ型の所有者、db_owner 固定データベース ロールのメンバ、および sysadmin 固定サーバー ロールのメンバに与えられています。
CREATE MESSAGE TYPE ステートメントがスキーマ コレクションを指定する場合、ステートメントを実行するユーザーは、指定されているスキーマ コレクションに対する REFERENCES 権限が必要です。
例
A. 整形式の XML が含まれるメッセージ型を作成する
次の例では、整形式の XML が含まれる新しいメッセージ型を作成します。
CREATE MESSAGE TYPE
[//Adventure-Works.com/Expenses/SubmitExpense]
VALIDATION = WELL_FORMED_XML ;
B. 型指定された XML が含まれるメッセージ型を作成する
次の例では、XML でエンコードされた経費報告書に対するメッセージ型を作成します。この例では、単純な経費報告書に対するスキーマを保持する XML スキーマ コレクションを作成します。次に、スキーマに対するメッセージを検証する新しいメッセージ型を作成します。
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. 空のメッセージに対するメッセージ型を作成する
次の例では、空のエンコードを使用して新しいメッセージ型を作成します。
CREATE MESSAGE TYPE
[//Adventure-Works.com/Expenses/SubmitExpense]
VALIDATION = EMPTY ;
D. バイナリ データが含まれるメッセージ型を作成する
次の例では、バイナリ データが含まれる新しいメッセージ型を作成します。メッセージには XML 以外のデータが含まれるので、メッセージ型には NONE
の検証型が指定されます。この場合、この型のメッセージを受信するアプリケーションで、メッセージにデータが含まれ、このデータが目的の型であることを確認する必要があります。
CREATE MESSAGE TYPE
[//Adventure-Works.com/Expenses/ReceiptImage]
VALIDATION = NONE ;
参照
関連項目
ALTER MESSAGE TYPE (Transact-SQL)
DROP MESSAGE TYPE (Transact-SQL)
EVENTDATA (Transact-SQL)
その他の技術情報
XML スキーマ コレクションの作成
Service Broker のチュートリアル
メッセージ型