次の方法で共有


XML データの読み込み

SQL Server 2000 から SQL Server 2005 または SQL Server 2008 へは、いくつかの方法で XML データを転送できます。次に例を示します。

  • SQL Server 2000 データベースの [n]text 型または image 型の列にデータが含まれている場合、Integration Services を使用して、新しいバージョンのデータベースにテーブルをインポートできます。ALTER TABLE ステートメントを使用して列の型を XML に変更します。

  • bcp out を使用して SQL Server 2000 からデータの一括コピーを実行し、bcp in を使用して新しいバージョンのデータベースにそのデータの一括挿入を実行できます。

  • SQL Server 2000 データベースのリレーショナル列にデータが含まれている場合、新しいテーブルを作成し、[n]text 型の列や行 ID を保存する主キー列 (任意) を含めます。クライアント側プログラミングを使用して、FOR XML によりサーバーで生成された XML を取得し、[n]text 型の列に書き込みます。その後で、既に説明した技法により、新しいバージョンのデータベースにデータを転送します。XML を新しいバージョンのデータベースの XML 列に直接書き込むこともできます。

XML データの一括読み込み

bcp など、SQL Server の一括読み込み機能によって XML データをサーバーに一括で読み込むことができます。OPENROWSET を使用すると、ファイルから XML 列にデータを読み込むことができます。この点について、次の例で説明します。

例 : ファイルからの XML の読み込み

この例では、テーブル T に行を挿入する方法を示します。C:\MyFile\xmlfile.xml から CLOB として XML 列の値を読み込み、整数型の列に値 10 を保存します。

INSERT INTO T
SELECT 10, xCol
FROM    (SELECT *    
    FROM OPENROWSET (BULK 'C:\MyFile\xmlfile.xml', SINGLE_CLOB) 
 AS xCol) AS R(xCol)

テキスト エンコード

SQL Server では XML データを Unicode (UTF-16) で保存します。サーバーから取得する XML データは UTF-16 エンコードで出力されます。それ以外のエンコードが必要な場合、取得したデータに必要な変換を行う必要があります。変換した XML データのエンコードが異なる場合があります。その場合は、注意してデータを読み込む必要があります。次に例を示します。

  • Unicode (UCS-2、UTF-16) のテキスト XML は、問題なく XML 列、変数、またはパラメータに代入できます。

  • 基になるコード ページの都合で Unicode ではなく、かつ暗黙のエンコードの場合、データベースの文字列のコード ページは読み込むコード ポイントと同一か、互換性がある必要があります。必要であれば COLLATE を使用します。サーバーにそのようなコード ページが存在しない場合、エンコードを修正する明示的な XML 宣言を追加する必要があります。

  • 明示的なエンコードを使用するには、コード ページに連動しない varbinary() 型を使用するか、適切なコード ページの文字列型を使用します。次に、データを XML の列、変数、またはパラメータに割り当てます。

例 : エンコードの明示的な指定

明示的な XML 宣言が行われていない XML ドキュメント vcdoc を varchar(max) として保存しているとします。次のステートメントは、エンコード "iso8859-1" を指定した XML 宣言を追加し、この XML ドキュメントを宣言に連結します。バイト表現を保持するために結果を varbinary(max) にキャストし、最終的にその結果を XML にキャストします。その結果、XML プロセッサで、指定したエンコード "iso8859-1" に従ってデータを解析し、対応する文字列値の UTF-16 表現を生成できます。

SELECT CAST( 
CAST (('<?xml version="1.0" encoding="iso8859-1"?>'+ vcdoc) AS VARBINARY (MAX)) 
 AS XML)

文字列エンコードの非互換性

XML をコピーし、文字列リテラルとして SQL Server Management Studio のクエリ エディタ ウィンドウに貼り付けると、[N]VARCHAR 文字列エンコードの非互換性の問題が発生する可能性があります。この問題が発生するかどうかは、XML インスタンスのエンコードによって決まります。多くの場合、XML 宣言の削除が必要になります。次に例を示します。

<?xml version="1.0" encoding="UTF-8"?>
  <xsd:schema …

続いて、N を指定し、XML インスタンスを Unicode 形式のインスタンスにします。次に例を示します。

-- Assign XML instance to a variable.
DECLARE @X XML
SET @X = N'…'
-- Insert XML instance into an xml type column.
INSERT INTO T VALUES (N'…')
-- Create an XML schema collection
CREATE XML SCHEMA COLLECTION XMLCOLL1 AS N'<xsd:schema … '