Преобразования типов данных и заметка sql:datatype (SQLXML 4.0)
Применимо к:база данных SQL ServerAzure SQL
В схеме XSD атрибут xsd:type задает тип данных XSD элемента или атрибута. Если схема XSD используется для получения данных из базы данных, указанный тип данных используется для форматирования данных.
Помимо указания типа XSD в схеме, можно также указать тип данных Microsoft SQL Server с помощью заметки sql:datatype. Атрибуты xsd:type и sql:datatype управляют сопоставлением между типами данных XSD и SQL Server типами данных.
Атрибут xsd:type
Атрибут xsd:type можно использовать для указания типа данных XML атрибута или элемента, сопоставленного со столбцом. Xsd:type влияет на документ, возвращаемый с сервера, а также на выполняемый запрос XPath. При выполнении запроса XPath к схеме сопоставления, содержащей xsd:type, XPath использует указанный тип данных при обработке запроса. Дополнительные сведения о том, как XPath использует xsd:type, см. в статье Сопоставление типов данных XSD с типами данных XPath (SQLXML 4.0).
В возвращенном документе все SQL Server типы данных преобразуются в строковые представления. Для некоторых типов данных необходимо дополнительное преобразование. В следующей таблице перечислены преобразования, используемые для различных значений xsd:type .
Тип данных XSD | Преобразование SQL Server |
---|---|
Логическое | CONVERT(bit, COLUMN) |
Дата | LEFT(CONVERT(nvarchar(4000), COLUMN, 126), 10) |
Decimal | CONVERT(money, COLUMN) |
id/idref/idrefs | id-prefix + CONVERT(nvarchar(4000), COLUMN, 126) |
nmtoken/nmtokens | id-prefix + CONVERT(nvarchar(4000), COLUMN, 126) |
Time | SUBSTRING(CONVERT(nvarchar(4000), COLUMN, 126), 1+CHARINDEX(N'T', CONVERT(nvarchar(4000), COLUMN, 126)), 24) |
Все остальные | Дополнительное преобразование не выполняется |
Примечание
Некоторые значения, возвращаемые SQL Server, могут быть несовместимы с типами данных XML, заданными с помощью xsd:type, либо потому, что преобразование невозможно (например, преобразование XYZ в десятичный тип данных), либо из-за того, что значение превышает диапазон этого типа данных (например, -100000, преобразованный в тип XSD UnsignedShort). Несовместимые преобразования типов могут привести к недопустимым XML-документам или ошибкам SQL Server.
Сопоставление типов данных SQL Server с типами данных XSD
В следующей таблице показано очевидное сопоставление типов данных SQL Server с типами данных XSD. Если вы знаете тип SQL Server, эта таблица предоставляет соответствующий тип XSD, который можно указать в схеме XSD.
Тип данных SQL Server | Тип данных XSD |
---|---|
bigint | long |
binary | base64Binary |
bit | boolean |
char | строка |
datetime | dateTime |
decimal | decimal |
float | double |
image | base64Binary |
int | int |
money | decimal |
nchar | строка |
ntext | строка |
nvarchar | строка |
numeric | decimal |
real | float |
smalldatetime | dateTime |
smallint | short |
smallmoney | decimal |
sql_variant | строка |
sysname | строка |
text | строка |
timestamp | dateTime |
tinyint | unsignedByte |
varbinary | base64Binary |
varchar | строка |
uniqueidentifier | строка |
Заметка sql:datatype
Заметка sql:datatype используется для указания типа данных SQL Server; эта заметка должна указываться в следующих случаях:
Выполняется массовая загрузка в столбец dateTime SQL Server из XSD типа dateTime, date или time. В этом случае необходимо определить тип данных столбца SQL Server с помощью sql:datatype="dateTime". Это правило применяется только для диаграмм обновления.
Выполняется массовая загрузка в столбец типа SQL Server uniqueidentifier, а значениеМ XSD является GUID, включающий фигурные скобки ({ и }). При указании sql:datatype="uniqueidentifier" фигурные скобки удаляются из значения перед его вставкой в столбец. Если sql:datatype не указан, значение отправляется с фигурными скобками, а вставка или обновление завершается ошибкой.
Тип данных XML base64Binary сопоставляется с различными SQL Server типами данных (binary, image или varbinary). Чтобы сопоставить тип данных XML base64Binary с определенным SQL Server типом данных, используйте заметку sql:datatype. Эта заметка указывает явный SQL Server тип данных столбца, с которым сопоставляется атрибут. Это полезно, если данные сохраняются в базах данных. Указав заметку sql:datatype, можно определить явный SQL Server тип данных.
Обычно рекомендуется указывать sql:datatype в схеме.
Примеры
Чтобы создать рабочие образцы на основе следующих примеров, необходимо выполнить определенные требования. Дополнительные сведения см. в разделе Требования для выполнения примеров SQLXML.
A. Указание заметки xsd:type
В этом примере показано, как тип даты XSD, заданный с помощью атрибута xsd:type в схеме, влияет на результирующий XML-документ. Схема обеспечивает XML-представление таблицы Sales.SalesOrderHeader в базе данных AdventureWorks.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="Order" sql:relation="Sales.SalesOrderHeader">
<xsd:complexType>
<xsd:attribute name="SalesOrderID" type="xsd:string" />
<xsd:attribute name="CustomerID" type="xsd:string" />
<xsd:attribute name="OrderDate" type="xsd:date" />
<xsd:attribute name="DueDate" />
<xsd:attribute name="ShipDate" type="xsd:time" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
В этой схеме XSD есть три атрибута, которые возвращают значение даты из SQL Server. Если схема:
Указывает xsd:type=date в атрибуте OrderDate. Отображается часть значения даты, возвращаемого SQL Server для атрибута OrderDate.
Указывает xsd:type=time в атрибуте ShipDate. Отображается часть времени значения, возвращаемого SQL Server для атрибута ShipDate.
Не указывает xsd:type в атрибуте DueDate, отображается то же значение, которое возвращает SQL Server.
Проверка образца запроса XPath к схеме
Скопируйте приведенный выше код схемы и вставьте его в текстовый файл. Сохраните файл с именем xsdType.xml.
Скопируйте следующий шаблон и вставьте его в текстовый файл. Сохраните файл под именем xsdTypeT.xml в том же каталоге, где был сохранен файл xsdType.xml.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="xsdType.xml"> /Order </sql:xpath-query> </ROOT>
Путь к каталогу схемы сопоставления (файл xsdType.xml) задается относительно каталога, в котором сохранен шаблон. Можно также задать абсолютный путь, например:
mapping-schema="C:\SqlXmlTest\xsdType.xml"
Создайте и запустите тестовый скрипт SQLXML 4.0 (Sqlxml4test.vbs), чтобы выполнить шаблон.
Дополнительные сведения см. в статье Использование ADO для выполнения запросов SQLXML 4.0.
Частичный результирующий набор:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Order SalesOrderID="43659"
CustomerID="676"
OrderDate="2001-07-01"
DueDate="2001-07-13T00:00:00"
ShipDate="00:00:00" />
<Order SalesOrderID="43660"
CustomerID="117"
OrderDate="2001-07-01"
DueDate="2001-07-13T00:00:00"
ShipDate="00:00:00" />
...
</ROOT>
Эквивалентная схема XDR:
<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes"
xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="Order" sql:relation="Sales.SalesOrderHeader">
<AttributeType name="SalesOrderID" />
<AttributeType name="CustomerID" />
<AttributeType name="OrderDate" dt:type="date" />
<AttributeType name="DueDate" />
<AttributeType name="ShipDate" dt:type="time" />
<attribute type="SalesOrderID" sql:field="OrderID" />
<attribute type="CustomerID" sql:field="CustomerID" />
<attribute type="OrderDate" sql:field="OrderDate" />
<attribute type="DueDate" sql:field="DueDate" />
<attribute type="ShipDate" sql:field="ShipDate" />
</ElementType>
</Schema>
Б. Указание типа данных SQL с помощью заметки sql:datatype
Рабочий пример см. в разделе ПримерЫ массовой загрузки XML (SQLXML 4.0). В этом примере выполняется массовая загрузка значения идентификатора GUID, включая "{" и "}". Схема в этом примере указывает sql:datatype, чтобы определить тип данных SQL Server как uniqueidentifier. В этом примере показано, когда в схеме необходимо указать sql:datatype .
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по