XML アップデートグラムのガイドラインと制限 (SQLXML 4.0)
XML アップデートグラムを使用する場合は、次の点に注意してください。
アップデートグラムで挿入操作を行う場合に、<before> ブロックと <after> ブロックの組が 1 つだけの場合は、<before> ブロックを省略できます。逆に、削除操作では、<after> ブロックを省略できます。
アップデートグラムにおいて、<sync> タグに複数の <before> ブロックと <after> ブロックを使用する場合は、<before> と <after> の対になるよう、<before> ブロックと <after> ブロック両方を指定する必要があります。
アップデートグラムの更新は、XML スキーマで提供される XML ビューに適用されます。したがって、既定のマッピングが正しく行われるようにするには、アップデートグラムでスキーマ ファイル名を指定するか、ファイル名を指定しない場合は、要素名と属性名がデータベースのテーブル名と列名に一致している必要があります。
SQL Server 2005 で SQLXML 4.0 を使用する場合、アップデートグラムのすべての列値は、子要素の XML ビューを構成するため提供される XDR スキーマまたは XSD スキーマで明示的にマップされる必要があります。この動作は以前のバージョンの SQLXML とは異なります。以前のバージョンでは、sql:relationship 注釈で列の値が外部キーの一部として暗黙的に指定されていれば、スキーマでマップされない列値も許可されていました。この変更は、子要素への主キー値の割り当てには影響しません。SQLXML 4.0 では、子要素に対して明示的に値が指定されていない場合でも、値が割り当てられます。
アップデートグラムを使用してバイナリ列 (SQL Server image データ型など) のデータを変更する場合は、マッピング スキーマを使用して、SQL Server データ型を sql:datatype="image" のように指定し、XML データ型を dt:type="binhex" や dt:type="binbase64" のように指定する必要があります。バイナリ列のデータは、アップデートグラム内に指定する必要があります。マッピング スキーマで指定される sql:url-encode 注釈は、アップデートグラムでは無視されます。
XSD スキーマを記述するときに、sql:relation 注釈または sql:field 注釈に指定する値に特殊文字が含まれる場合、たとえば、スペースを含むテーブル名 "Order Details" を指定する場合などは、値を "[Order Details]" のように角かっこで囲む必要があります。
アップデートグラムの使用で、チェーン リレーションシップはサポートされません。たとえば、テーブル A とテーブル C が、テーブル B を使用するチェーン リレーションシップで関連付けられている場合は、アップデートグラムの実行時に次のエラーが発生します。
There is an inconsistency in the schema provided.
スキーマとアップデートグラムの両方が正しく、有効な形式であっても、チェーン リレーションシップが存在すると、このエラーが発生します。
アップデートグラムでは、更新中に image 型データをパラメータとして引き渡すことはできません。
text/ntext や image のようなバイナリ ラージ オブジェクト (BLOB) 型は、アップデートグラムの <before> ブロックでは使用しないでください。使用すると、これらが同時実行制御で使用され、SQL Server で、BLOB 型の比較の制限によって問題が発生する可能性があります。たとえば、text データ型の列を比較するには WHERE 句で LIKE キーワードを使用しますが、データ サイズが 8 KB を超える BLOB 型の場合、この比較は失敗します。
ntext データで特殊文字を使用すると、BLOB 型の比較の制限によって、SQLXML 4.0 で問題が発生する可能性があります。たとえば、アップデートグラムの <before> ブロックに "[Serializable]" を使用すると、ntext 型列に対する同時実行制御チェックで操作が失敗し、次の SQLOLEDB エラー説明が返されます。
Empty update, no updatable rows found Transaction aborted
参照
関連項目
アップデートグラムのセキュリティに関する注意点 (SQLXML 4.0)