適用対象:SQL Server
Azure SQL データベース
XSD スキーマでは、 xsd:type 属性は要素または属性の XSD データ型を指定します。 XSD スキーマを使用したデータベースからのデータの抽出では、指定されているデータ型を使用して、データが書式設定されます。
スキーマで XSD 型を指定するだけでなく、 sql:datatype 注釈を使用して Microsoft SQL Server データ型を指定することもできます。 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(ビット、列) |
| 日 | 左(コンバート(nvarchar(4000)、列、126)、10) |
| 10 進 | CONVERT(マネー、カラム) |
| id/idref/idrefs | id-prefix + CONVERT(nvarchar(4000), 列、126) |
| nmtoken/nmtokens | id-prefix + CONVERT(nvarchar(4000), 列、126) |
| 時刻 | SUBSTRING(CONVERT(nvarchar(4000), 列、126)、1+CHARINDEX(N'T', CONVERT(nvarchar(4000), 列、126)), 24) |
| その他すべて | 追加の変換はありません。 |
Note
SQL Server によって返される一部の値は、 xsd:type を使用して指定された XML データ型と互換性がない場合があります 変換できない (たとえば、"XYZ" を decimal データ型に変換する) か、値がそのデータ型の範囲を超えている (たとえば、-100000 が UnsignedShort XSD 型に変換された) ためです。 互換性のない型変換を行うと、XML ドキュメントが無効になるか、SQL Server エラーが発生する可能性があります。
SQL Server データ型から XSD データ型へのマッピング
次の表は、SQL Server データ型から XSD データ型への明確なマッピングを示しています。 SQL Server の種類がわかっている場合、このテーブルには、XSD スキーマで指定できる対応する XSD 型が用意されています。
| SQL Server データ型 | XSD データ型 |
|---|---|
| bigint | long |
| [バイナリ] | base64Binary |
| bit | boolean |
| char | string |
| datetime | dateTime |
| decimal | decimal |
| float | double |
| image | base64Binary |
| int | int |
| money | decimal |
| nchar | string |
| ntext | string |
| nvarchar | string |
| numeric | decimal |
| real | float |
| smalldatetime | dateTime |
| smallint | short |
| smallmoney | decimal |
| sql_variant | string |
| sysname | string |
| text | string |
| timestamp | dateTime |
| tinyint | unsignedByte |
| varbinary | base64Binary |
| varchar | string |
| uniqueidentifier | string |
sql:datatype 注釈
sql:datatype注釈を使用して SQL Server データ型を指定します。この注釈は、次の場合に指定する必要があります。
XSD dateTime、date、または time 型から dateTimeSQL Server 列に一括読み込みを行います。 この場合は、 sql:datatype="dateTime"を使用して、SQL Server 列のデータ型を識別する必要があります。 この規則はアップデートグラムにも当てはまります。
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 を指定することをお勧めします。
例
次の例を使用した実際のサンプルを作成するには、特定の条件を満たす必要があります。
詳細については、「
A. xsd:type を指定する
この例では、スキーマの xsd:type 属性を使用して指定された XSD date 型が結果の XML ドキュメントに与える影響を示します。 このスキーマでは、AdventureWorks データベース内の Sales.SalesOrderHeader テーブルの XML ビューが提供されます。
<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 から日付値を返す 3 つの属性があります。 それぞれの属性は次のとおりです。
OrderDate 属性のxsd:type=dateを指定します。OrderDate 属性に対して SQL Server によって返される値の日付部分が表示されます。
ShipDate 属性のxsd:type=timeを指定します。ShipDate 属性に対して SQL Server によって返される値の時刻部分が表示されます。
DueDate 属性にxsd:typeを指定しません。SQL Server によって返されるのと同じ値が表示されます。
スキーマに対してサンプル XPath クエリをテストするには
上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、 xsdType.xml として保存します。
次のテンプレートをコピーして、テキスト ファイルに貼り付け、 xsdType.xml を保存したディレクトリに xsdTypeT.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:datatype を使用して SQL データ型を指定する
実際のサンプルについては、「 XML 一括読み込みの例 (SQLXML 4.0)の例 G」を参照してください。 この例では、"{" および "}" を含む GUID 値の一括読み込みが行われます。 この例のスキーマでは、 sql:datatype を指定して、SQL Server データ型を uniqueidentifier として識別します。 この例では、スキーマで sql:datatype を指定する必要がある場合を示します。