SQLXML 4.0 SP1 の新機能
適用対象: SQL Server Azure SQL データベース
Microsoft SQLXML 4.0 SP1 では、多くの更新と拡張が行われています。 ここでは、更新内容についてまとめ、詳細情報がある場合はそのリンクを提供します。 SQLXML 4.0 SP1 では、SQL Server 2008 (10.0.x) で導入された新しいデータ型をサポートするための追加の拡張が行われています。 このトピックの項目は次のとおりです。
SQLXML 4.0 SP1 のインストール
サイド バイ サイド インストールに関する問題
SQLXML 4.0 と MSXML
SQLXML 4.0 の再配布
SQL Server Native Client のサポート
SQL Server 2005 (9.x) で導入されたデータ型のサポート
SQLXML 4.0 での XML 一括読み込みの変更点
SQLXML 4.0 でのレジストリ キーの変更点
移行の問題
SQLXML 4.0 SP1 のインストール
SQL Server 2008 (10.0.x) より前のバージョンでは、SQLXML 4.0 は SQL Server に付属してリリースされ、SQL Server のすべてのバージョン (SQL Server Express を除く) の既定のインストールに含まれていました。 SQL Server 2008 (10.0.x) 以降の 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 (9.x) 以降のインストール時にその一部としてインストールされます。
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 (10.0.x) の Date、Time、DateTime2、dateTimeOffset データ型など、サーバーに付属し、SQL Server Native Client でサポートされる新しいデータ型をサポートするように開発されているため、同じバージョンの SQL Server Native Client プロバイダーと SQL Server を使用することをお勧めします。
注意
SQL Server Native Client は SQL Server 2022 (16.x) で削除されました。
SQL Server Native Client は、SQL Server 2005 (9.x) で導入されたデータ アクセス テクノロジです。 これは SQLOLEDB プロバイダーと SQLODBC ドライバーを組み合わせて 1 つのネイティブ ダイナミック リンク ライブラリ (DLL) にしたものです。Microsoft Data Access Components (MDAC) とは独立した新しい機能も提供されます。
SQL Server で導入された機能のうち、MDAC および 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 ネイティブ クライアント プログラミング」を参照してください。
注意
SQLXML 4.0 には、下位の SQLXML 3.0 との完全な互換性はありません。 SQLXML 4.0 では不具合の修正とその他の機能変更が行われており、特に SQLXML ISAPI のサポートが削除されているため、IIS 仮想ディレクトリは使用できなくなりました。 大半のアプリケーションは少し変更すれば使用できますが、SQLXML 4.0 で運用する前には必ずテストを行ってください。
SQL Server 2005 および SQL Server 2008 で導入されたデータ型のサポート
SQL Server 2005 (9.x) では xml データ型が導入され、SQLXML 4.0 では xml データ型がサポートされています。 詳細については、SQLXML 4.0 の xml データ型のサポートに関する記事を参照してください。
SQLXML で XML ビューをマッピングするとき、XML の一括読み込みを行うとき、または XML アップデートグラムを実行するときの xml データ型の使用方法については、次で提供される例をご覧ください。
SQL Server 2008 (10.0.x) では、date、time、DateTime2、および DateTimeOffset が導入されました。 SQLXML 4.0 SP1 を、SQL Server 2012 (11.x) 付属の SQL Server Native Client OLE DB プロバイダー (SQLNCLI11) と共に使用した場合、これらの 4 つの新しいデータ型は組み込みスカラー型として有効になります。
重要
SQL Server Native Client (SNAC) は同梱されていません。
- SQL Server 2022 (16.x) 以降のバージョン
- SQL Server Management Studio (19 以降のバージョン) の場合:
SQL Server Native Client (SQLNCLI または SQLNCLI11) とレガシ Microsoft OLE DB Provider for SQL Server (SQLOLEDB) は、新しいアプリケーション開発には推奨されません。
新しいプロジェクトの場合は、次のいずれかのドライバーを使用します。
SQL Server データベース エンジン (バージョン 2012 から 2019) のコンポーネントとして付属する SQLNCLI については、この「サポート ライフサイクルの例外」を参照してください。
SQLXML 4.0 SP1 での XML 一括読み込みの変更点
SQLXML 4.0 の場合、xml データ型を使用して SchemaGen オーバーフロー フィールドが作成されます。 詳細については、「SQL Server XML 一括読み込みオブジェクト モデル」を参照してください。
以前に 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 がかっこで囲まずに返されます。 中かっこ ({some GUID} など) で 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 . This is a line feed and CR 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 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 で導入されたデータ型
ISAPI のサポートは SQLXML 4.0 から削除されているため、ソリューションで、XML データ型やユーザー定義データ型 (UDT) や Web ベースのアクセスなど、SQL Server 2005 (9.x) で導入された拡張データ入力機能が必要な場合は、SQLXML マネージド クラスや別の種類の HTTP ハンドラーなどの別のソリューションを使用する必要があります。 SQL Server 2005 のネイティブ XML Web サービスなど。
または、これらの型拡張が不要な場合は、引き続き SQLXML 3.0 を使用して SQL Server 2005 (9.x) および SQL Server 2008 (10.0.x) のインストールに接続できます。 SQLXML 3.0 ISAPI のサポートは、こうした新しいバージョンに対しても有効ですが、SQL Server 2005 (9.x) で導入された xml データ型や UDT 型はサポートされず、認識されません。
一時ファイルに関する XML 一括読み込みのセキュリティの変更点
SQLXML 4.0 および SQL Server では、XML 一括読み込みの権限は、一括読み込み操作を実行するユーザーに許可されます。 読み取りと書き込みの権限は、ファイル システムから継承されます。 以前のリリースの SQLXML および SQL Server では、SQLXML での XML 一括読み込みで作成される一時ファイルは保護されず、だれにでも読み取りが可能でした。
クライアント側の FOR XML の移行に関する問題
実行エンジンの変更により、SQL Server はベース テーブルのメタデータで、FOR XML クエリが SQL Server 2000 (8.x) で実行された場合とは異なる値を返す場合があります。 この場合、クライアント側の FOR XML クエリ結果の形式は、クエリの実行対象となるバージョンによって異なります。
クライアント側で、xml データ型の列に対し SQLXML 3.0 を使用して FOR XML クエリを実行する場合、結果のデータは完全にエンティティ化された文字列として返されます。 SQLXML 4.0 で、SQL Server Native Client (SQLNCLI11) がプロバイダーとして指定されている場合、データは XML として返されます。