共用方式為


CREATE MESSAGE TYPE (Transact-SQL)

建立新的訊息類型。訊息類型會定義訊息的名稱以及 Service Broker 針對該名稱的訊息所執行的驗證。交談的兩端必須定義相同的訊息類型。

主題連結圖示Transact-SQL 語法慣例

語法

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
    將訊息類型的擁有者設為指定的資料庫使用者或角色。當目前的使用者是 dbosa 時,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_ddladmindb_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 ;