XML アップデートグラムのガイドラインと制限 (SQLXML 4.0)
適用対象: SQL Server Azure SQL データベース
XML アップデートグラムを使用する場合は、次の点に注意してください。
挿入操作にアップデートグラムを使用する場合、<fore>ブロックと<>ブロックのペアが 1 つだけの場合は、<fore> ブロックを省略できます。 逆に、削除操作の場合、 <以降> ブロックは省略できます。
<sync> タグで複数の<> <以降>ブロックを持つアップデートグラムを使用する場合は、<fore>ブロックと<>ブロックの両方が<fore>および<after>ペアを形成するように指定する必要があります。
アップデートグラムの更新は、XML スキーマで提供される XML ビューに適用されます。 したがって、既定のマッピングが正しく行われるようにするには、アップデートグラムでスキーマ ファイル名を指定するか、ファイル名を指定しない場合は、要素名と属性名がデータベースのテーブル名と列名に一致している必要があります。
SQLXML 4.0 を使用する場合、アップデートグラムのすべての列値は、子要素の XML ビューを構成するために提供される XDR スキーマまたは XSD スキーマで明示的にマップする必要があります。 この動作は、以前のバージョンの SQLXML とは異なり、 sql:relationship 注釈の外部キーの一部として暗黙的に指定された場合、スキーマにマップされていない列の値を許可していました。 この変更は、子要素への主キー値の割り当てには影響しません。SQLXML 4.0 では、子要素に対して明示的に値が指定されていない場合でも、値が割り当てられます。
アップデートグラムを使用してバイナリ列 (SQL Server image データ型など) のデータを変更する場合は、SQL Server データ型 (例: sql:datatype="image") と XML データ型 (例: dt:type="binex" または 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やイメージなどのバイナリ ラージ オブジェクト (BLOB) 型は、アップデートグラムを操作する際に<fore> ブロックで使用しないでください。これはコンカレンシー制御で使用するためにそれらを含むためです。 これにより、BLOB の種類の比較に制限があるため、SQL Server で問題が発生する可能性があります。 たとえば、LIKE キーワードは、 text データ型の列を比較するために WHERE 句で使用されます。ただし、データのサイズが 8K を超える BLOB 型の場合、比較は失敗します。
ntext データの特殊文字は、BLOB の種類の比較に制限があるため、SQLXML 4.0 で問題を引き起こす可能性があります。 たとえば、ntext 型の列のコンカレンシー チェックで使用した場合、アップデートグラムの <before> ブロックで "[Serializable]" を使用すると、次の SQLOLEDB エラーの説明で失敗します。
Empty update, no updatable rows found Transaction aborted