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
    Устанавливает указанного пользователя или роль базы данных в качестве владельца типа сообщений. Если текущим пользователем является 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 ;   

Б. Создание типа сообщений, содержащего типизированный 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 ;

В. Создание типа сообщений для пустого сообщения

Этот пример создает новый тип сообщений с пустой кодировкой.

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

Г. Создание типа сообщений, содержащего двоичные данные

Этот пример создает новый тип сообщений, который может содержать двоичные данные. Так как сообщение будет хранить данные, отличные от 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
Типы сообщений

Справка и поддержка

Получение помощи по SQL Server 2005