次の方法で共有


SQLXML 4.0 SP1 の新機能

Microsoft SQLXML 4.0 SP1 では、多くの更新と拡張が行われています。 ここでは、更新内容についてまとめ、詳細情報がある場合はそのリンクを提供します。 SQLXML 4.0 SP1 では、SQL Server 2008 で導入された新しいデータ型をサポートするための追加の拡張が行われています。 このトピックの項目は次のとおりです。

  • SQLXML 4.0 SP1 のインストール

  • サイド バイ サイド インストールに関する問題

  • SQLXML 4.0 と MSXML

  • SQLXML 4.0 の再配布

  • SQL Server Native Client のサポート

  • SQL Server 2005 で導入されたデータ型のサポート

  • SQLXML 4.0 での XML 一括読み込みの変更点

  • SQLXML 4.0 でのレジストリ キーの変更点

  • 移行に関する問題

SQLXML 4.0 SP1 のインストール

SQL Server 2008 より前のバージョンでは、SQLXML 4.0 は SQL Server に付属してリリースされ、SQL Server のすべてのバージョン (SQL Server Express を除く) の既定のインストールに含まれていました。 SQL Server 2008 以降の SQL Server には、SQLXML の最新バージョン (SQLXML 4.0 SP1) が含まれないようになりました。 SQLXML 4.0 SP1 をインストールするには、SQLXML 4.0 SP1 のインストール場所からダウンロードしてください。

SQLXML 4.0 SP1 のファイルは次の場所にインストールされます。

%PROGRAMFILES%\SQLXML 4.0\

注意

SQLXML 4.0 に必要なレジストリ設定はすべて、インストール処理の一部として行われます。

32 ビットの SQLXML アプリケーションを 64 ビット Windows オペレーティング システム上の Windows on Windows (WOW64) で実行できるようにするには、64 ビットの SQLXML 4.0 SP1 パッケージ (sqlxml4.msi) を実行してください。このパッケージは、ダウンロード センターで入手できます。

SQLXML 4.0 SP1 のアンインストール

SQLXML 3.0 SP3、SQLXML 4.0、および SQLXML 4.0 SP1 には、共有のレジストリ キーがあります。 SQLXML 3.0 SP3 があるコンピューター上で SQLXML のより新しいバージョンをアンインストールすると、SQLXML 3.0 SP3 を再インストールする必要が生じる場合もあります。

サイド バイ サイド インストールに関する問題

SQLXML 4.0 のインストール処理では、以前のバージョンの SQLXML でインストールされたファイルは削除されません。 したがって、コンピューターに、バージョンの異なる SQLXML の DLL を複数インストールして、 同時に実行することができます。 SQLXML 4.0 には、バージョン固有ではない PROGID とバージョン固有の PROGID の両方が含まれています。 すべての製品アプリケーションでは、バージョン固有の PROGID を使用する必要があります。

SQLXML 4.0 SP1 と MSXML

SQLXML 4.0 では、MSXML はインストールされません。 SQLXML 4.0 では MSXML 6.0 が使用されますが、これは SQL Server 2005 以降のインストール時にその一部としてインストールされます。

SQLXML 4.0 SP1 の再配布

SQLXML 4.0 SP1 は、再配布可能インストーラー パッケージを使って再配布できます。 チェイナーとブートストラップのテクノロジを使用すると、ユーザーが 1 回のインストール手順に従うだけで複数のパッケージをまとめてインストールできるようになります。 詳細については、「Visual Studio 2005 用のカスタム ブートストラップ パッケージの作成」および「カスタムの必須コンポーネントの追加」を参照してください。

アプリケーションが、開発時に使用したものとは異なるプラットフォームを対象としている場合、Microsoft ダウンロード センターから x64、Itanium、および x86 用のバージョンの sqlncli.msi をダウンロードできます。

MSXML 6.0 には、個別の再配布インストール プログラム (msxml6.msi) もあります。 これらのプログラムは SQL Server インストール CD の次の場所にあります。

%CD%\Setup\

これらのインストール ファイルを使用すると、MSXML 6.0 を CD から直接インストールできます。 インストール ファイルは、独自に作成したアプリケーションと共に MSXML 6.0 と SQLXML 4.0 SP1 を再配布するときにも自由に使用できます。

独自のアプリケーションでデータ プロバイダーとして使用する場合は、SQL Server Native Client も再配布する必要があります。 詳細については、「SQL Server Native Client のインストール」を参照してください。

SQL Server Native Client のサポート

SQLXML 4.0 では、SQLOLEDB と SQL Server Native Client プロバイダーの両方がサポートされています。 SQL Server Native Client は、サーバーに含まれているすべての新しいデータ型をサポートするように開発されているため (たとえば、SQL Server 2008 では Date, Time、DateTime2、および dateTimeOffset データ型が SQL Server 2012 Native Client でサポートされています)、同じバージョンの SQL Server Native Client プロバイダーと SQL Server を使用することをお勧めします。

SQL Server Native Client は、SQL Server 2005 で導入されたデータ アクセス テクノロジです。 これは SQLOLEDB プロバイダーと SQLODBC ドライバーを組み合わせて 1 つのネイティブ ダイナミック リンク ライブラリ (DLL) にしたものです。Microsoft Data Access Components (MDAC) とは独立した新しい機能も提供されます。

SQL Server で導入された機能のうち、MDAC および Microsoft Windows において SQLOLEDB と SQLODBC でサポートされていない機能を利用する必要がある場合は、SQL Server Native Client を使用して、新しいアプリケーションを作成したり既存のアプリケーションを拡張したりすることができます。 たとえば、FOR XML などのクライアント側の SQLXML 機能で xml データ型を使用するには、SQL Server Native Client が必要です。 詳細については、「クライアント側の XML 書式設定 (SQLXML 4.0)」、「ADO を使用した、SQLXML 4.0 クエリの実行」、および「SQL Server Native Client プログラミング」を参照してください。

注意

SQLXML 4.0 には、下位の SQLXML 3.0 との完全な互換性はありません。 SQLXML 4.0 では不具合の修正とその他の機能変更が行われており、特に SQLXML ISAPI のサポートが削除されているため、IIS 仮想ディレクトリは使用できなくなりました。 大半のアプリケーションは少し変更すれば使用できますが、SQLXML 4.0 で運用する前には必ずテストを行ってください。

SQL Server 2005 および SQL Server 2008 で導入されたデータ型のサポート

SQL Server 2005 では xml データ型が導入され、SQLXML 4.0 では xml データ型がサポートされます。 詳細については、「SQLXML 4.0 での xml データ型のサポート」を参照してください。

SQLXML で XML ビューをマッピングするとき、XML の一括読み込みを行うとき、または XML アップデートグラムを実行するときの xml データ型の使用方法については、次で提供される例を参照してください。

SQL Server 2008 では、Date, Time、DateTime2、および DateTimeOffset データ型が導入されました。 SQLXML 4.0 SP1 を、SQL Server 2012 付属の SQL Server 2012 Native Client OLE DB プロバイダー (SQLNCLI11) と共に使用した場合、これらの 4 つの新しいデータ型は組み込みスカラー型として有効になります。

SQLXML 4.0 SP1 での XML 一括読み込みの変更点

  • SQLXML 4.0 では、xml データ型を使用した SchemaGen オーバーフロー フィールドが作成されます。 詳細については、「SQL Server XML 一括読み込みオブジェクト モデル (SQLXML 4.0)」を参照してください。

  • 以前に Microsoft Visual Basic アプリケーションを作成済みで、SQLXML 4.0 を使用する場合は、Xblkld4.dll を参照するようアプリケーションを再コンパイルする必要があります。

  • Visual Basic Scripting Edition のアプリケーションについては、使用する DLL を登録する必要があります。 次の例で、バージョン固有でない PROGID を指定した場合、アプリケーションは最後に登録された DLL に従って動作します。

    set objBulkLoad = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad") 
    
    注意

    バージョン固有の PROGID は、SQLXMLBulkLoad.SQLXMLBulkLoad.4.0 です。

SQLXML 4.0 でのレジストリ キーの変更点

SQLXML 4.0 では、以前のリリースと比べてレジストリ キーが次のように変更されています。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SQLXML4\TemplateCacheSize

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SQLXML4\SchemaCacheSize

SQLXML 4.0 でこれらのキーを有効にするには、設定を変更する必要があります。

また、SQLXML 4.0 では次のレジストリ キーが導入されています。

  • HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\ReportErrorsWithSQLInfo

    SQLXML 4.0 の既定では、以前のバージョンの SQLXML と違って高いレベルの SQLXML エラーは返されず、代わりに OLE DB と SQL Server のネイティブ エラー情報が返されます。 この動作を変更する場合は、DWORD 型のこのレジストリ キーの値を 0 に設定する必要があります (既定値は 1)。

  • HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\FORXML_GenerateGUIDBraces

    既定で SQLXML では、SQL Server GUID がかっこで囲まずに返されます。 返される GUID 値を {some GUID} のようにかっこで囲む場合は、このレジストリ キーの値を 1 に設定する必要があります (既定値は 0)。

  • HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\SQL2000CompatMode

    既定では、XML パーサーでデータが読み込まれるとき、空白文字は XML 1.0 規則に従って正規化されます。 この結果、データの空白文字の一部が失われることがあります。 これによってデータの意味が変わることはありませんが、データのテキストは解析後に同じでなくなります。

    新しく導入されたこのキーを使用すると、データの空白文字を保持するよう指定できます。 このレジストリ キーを追加し、値を 0 に設定すると、XML の空白文字 (LF、CR、タブ) は、属性値の場合はエンコードされて返され、 要素値の場合は CR だけがエンコードされて返されます。

    次に例を示します。

    CREATE TABLE T( Col1 int, Col2 nvarchar(100));
    GO
    -- Insert data with tab, line feed and carriage return).
    INSERT INTO T VALUES (1, 'This is a tab    . This is a line feed and CR 
     more text');
    GO
    -- Test this query (without the registry key).
    SELECT * FROM T 
    FOR XML AUTO;
    -- This is the result (no encoding of special characters).
    <?xml version="1.0" encoding="utf-8" ?>
    <r>
      <T Col1="1" 
         Col2="This is a tab    . This is a line feed and CR 
     more text"/>
    </r>
    -- Now add registry key with value 0 and execute the query again.
    -- Note the encoding for carriage return, line-feed and tab in the attribute value.
    <?xml version="1.0" encoding="utf-8" ?>
    <r>
      <T Col1="1" 
         Col2="This is a tab &#x09;. This is a line feed and CR &#x0D;&#x0A; more text"/>
    </r>
    
    -- Update the query and specify ELEMENTS directive
    SELECT * FROM T
    FOR XML AUTO, ELEMENTS
    -- Only the carriage return is returned encoded.
    <?xml version="1.0" encoding="utf-8" ?>
    <r>
       <T>
          <Col1>1</Col1>
          <Col2>This is a tab    . This is a line feed and CR &#x0D;
     more text</Col2>
       </T>
    </r>
    

移行に関する問題

SQLXML のレガシ アプリケーションから SQLXML 4.0 への移行に影響を与える可能性のある問題を次に示します。

ADO と SQLXML 4.0 のクエリ

以前のバージョンの SQLXML では、IIS 仮想ディレクトリを使用した URL ベースのクエリ実行と、SQLXML ISAPI フィルターがサポートされていました。 SQLXML 4.0 を使用するアプリケーションで、このサポートは使用できなくなりました。

代わりに、Microsoft Data Access Components (MDAC) 2.6 以降で最初に導入された ADO (ActiveX Data Objects) の SQLXML 拡張を使用して、SQLXML クエリ、テンプレート、アップデートグラムを実行できます。

詳細については、「ADO を使用した、SQLXML 4.0 クエリの実行」を参照してください。

SQLXML 3.0 ISAPI のサポートと SQL Server 2005 で導入されたデータ型

SQLXML 4.0 では ISAPI のサポートが削除されたため、ソリューションにおいて xml データ型ユーザー定義データ型 (UDT) など SQL Server 2005 で導入されたデータ型の拡張機能と Web ベースのアクセスを使用する必要がある場合は、SQLXML マネージ クラスなどの別のソリューションを使用するか、SQL Server 2005 用ネイティブ XML Web サービスなどの別の種類の HTTP ハンドラーを使用する必要があります。

このような拡張されたデータ型が必要ではない場合は、引き続き SQLXML 3.0 を使用して SQL Server 2005 および SQL Server 2008 に接続できます。 SQLXML 3.0 ISAPI のサポートは、こうした新しいバージョンに対しても有効ですが、SQL Server 2005 で導入された xml データ型や UDT 型はサポートされず、認識されません。

一時ファイルに関する XML 一括読み込みのセキュリティの変更点

SQLXML 4.0 および SQL Server では、XML 一括読み込みの権限は、一括読み込み操作を実行するユーザーに許可されます。 読み取りと書き込みの権限は、ファイル システムから継承されます。 以前のリリースの SQLXML および SQL Server では、SQLXML での XML 一括読み込みで作成される一時ファイルは保護されず、だれにでも読み取りが可能でした。

クライアント側の FOR XML の移行に関する問題

SQL Server では、実行エンジンが変更されたため、ベース テーブルのメタデータ内に返される値は、SQL Server 2000 で FOR XML クエリを実行した場合と異なることがあります。 この場合、クライアント側の FOR XML クエリ結果の形式は、クエリの実行対象となるバージョンによって異なります。

クライアント側で、xml データ型の列に対し SQLXML 3.0 を使用して FOR XML クエリを実行する場合、結果のデータは完全にエンティティ化された文字列として返されます。 SQLXML 4.0 で、SQL Server Native Client (SQLNCLI11) がプロバイダーとして指定されている場合、データは XML として返されます。