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