SQLXML 4.0 の新機能

Microsoft SQLXML 4.0 では、多くの更新と拡張が行われています。ここでは、更新内容についてまとめ、詳細情報がある場合はそのリンクを提供します。項目は次のとおりです。

  • SQLXML 4.0 のインストールと配置
  • サイド バイ サイド インストールに関する問題
  • SQLXML 4.0 と MSXML
  • SQLXML 4.0 の再配布
  • SQL Native Client のサポート
  • SQL Server 2005 で導入されたデータ型のサポート
  • SQLXML 4.0 での XML 一括読み込みの変更点
  • SQLXML 4.0 でのレジストリ キーの変更点
  • ADO と SQLXML 4.0 のクエリ

SQLXML 4.0 のインストールと配置

SQLXML 4.0 は、Microsoft SQL Server 2005 サーバーまたはツールを Notification Services と共にインストールすると、自動的にインストールされます。

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

%PROGRAMFILES%\SQLXML 4.0\

ms171744.note(ja-jp,SQL.90).gifメモ :
SQLXML 4.0 に必要なレジストリ設定はすべて、インストール処理の一部として行われます。

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

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

SQLXML 4.0 と MSXML

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

SQLXML 4.0 の再配布

一般に、SQLXML 4.0 は、Notification Services を含む SQL Server 2005 インストールの一部としてインストールすることが推奨されます。SQLXML 4.0 と MSXML 6.0 には、個別の再配布インストール プログラム (sqlxml4.msi と msxml6.msi) もあります。これらのプログラムは SQL Server 2005 インストール CD の次の場所にあります。

%CD%\Setup\

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

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

SQL Native Client のサポート

SQLXML 4.0 では、SQLOLEDB プロバイダと SQL Native Client (SQLNCLI) プロバイダの両方がサポートされますが、SQLNCLI を使用することをお勧めします。SQLNCLI では、xml データ型など、SQL Server 2005 で導入された新機能がサポートされます。

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

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

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

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

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

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

SQLXML 4.0 での 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") 
    
    ms171744.note(ja-jp,SQL.90).gifメモ :
    バージョン固有の 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 4.0 と SQL Server 2005 の移行に関する問題

SQLXML のレガシ アプリケーションから SQL Server 2005 および 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 マネージ クラスなどの別のソリューションを使用するか、Native XML Web Services for SQL Server 2005 などの別の種類の HTTP ハンドラを使用する必要があります。

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

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

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

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

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

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