Преобразования типов данных и заметка sql:datatype (SQLXML 4.0)
Область применения: SQL Server База данных SQL Azure
В схеме 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) |
десятичное | CONVERT(money, COLUMN) |
id/idref/idrefs | id-prefix + CONVERT(nvarchar(4000), COLUMN, 126) |
nmtoken/nmtokens | id-prefix + CONVERT(nvarchar(4000), COLUMN, 126) |
Время | 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 | string |
datetime | dateTime |
десятичное | десятичное |
float | double |
Изображение | base64Binary |
int | int |
money | десятичное |
nchar | string |
ntext | string |
nvarchar | string |
numeric | десятичное |
real | float |
smalldatetime | dateTime |
smallint | short |
smallmoney | десятичное |
sql_variant | string |
sysname | string |
text | string |
timestamp | dateTime |
tinyint | unsignedByte |
varbinary | base64Binary |
varchar | string |
uniqueidentifier | string |
Заметка sql:datatype
Заметка sql:datatype используется для указания типа данных SQL Server. Эта заметка должна быть указана, когда:
Массовая загрузка в столбец dateTimeSQL Server из типа XSD dateTime, date или time . В этом случае необходимо определить тип данных столбца SQL Server с помощью sql:datatype="dateTime". Это правило применяется только для диаграмм обновления.
Массовая загрузка в столбец типа uniqueidentifier SQL Server, а значение XSD — это GUID, включающий фигурные скобки ({ и }). При указании sql:datatype="uniqueidentifier" фигурные скобки удаляются из значения перед вставкой в столбец. Если sql:datatype не указан, значение отправляется с фигурными скобками, а вставка или обновление завершается ошибкой.
Тип данных XML base64Binary сопоставляется с различными типами данных SQL Server (двоичными, изображениями или varbinary). Чтобы сопоставить тип данных XML base64Binary с определенным типом данных SQL Server, используйте заметку sql:datatype . Эта заметка указывает явный тип данных SQL Server столбца, с которым сопоставляется атрибут. Это полезно, если данные сохраняются в базах данных. Указав заметку sql:datatype , можно определить явный тип данных SQL Server.
Обычно рекомендуется указать sql:datatype в схеме.
Примеры
Чтобы создать рабочие образцы на основе следующих примеров, необходимо выполнить определенные требования. Дополнительные сведения см. в разделе "Требования к выполнению примеров SQLXML".
А. Указание заметки 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>
B. Указание типа данных SQL с помощью заметки sql:datatype
Рабочий пример см. в примере G в примерах массовой загрузки XML (SQLXML 4.0). В этом примере выполняется массовая загрузка значения идентификатора GUID, включая "{" и "}". Схема в этом примере указывает sql:datatype, чтобы определить тип данных SQL Server как уникальный идентификатор. В этом примере показано, когда sql:datatype должен быть указан в схеме.
Кері байланыс
https://aka.ms/ContentUserFeedback.
Жақында қолжетімді болады: 2024 жыл бойы біз GitHub Issues жүйесін мазмұнға арналған кері байланыс механизмі ретінде біртіндеп қолданыстан шығарамыз және оны жаңа кері байланыс жүйесімен ауыстырамыз. Қосымша ақпаратты мұнда қараңыз:Жіберу және пікірді көру