次の方法で共有


正規の形式とパターン制限

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance

XSD パターン ファセットを使用すると、単純型の字句空間を制限できます。 複数の字句表現が可能であるような型にパターン制限を適用すると、一部の値が原因で検証時に予想外の動作が発生することがあります。

このような動作は、その値の字句表現がデータベースに格納されていないために発生します。 したがって、このような値は、出力としてシリアル化される際に、それぞれの正規表現に変換されます。 ドキュメントに含まれる値の正規形式が型のパターン制限に準拠していない場合に、ユーザーがそのドキュメントの再挿入を試みると、そのドキュメントは拒否されます。

SQL Server ではこれを回避するために、再挿入できない値を含む XML ドキュメントはすべて、正規の形式がパターン制限に違反しているという理由で拒否します。 たとえば、値 "33.000" は、"33\.0+" というパターン制限が指定されている xs:decimal からの派生型に対して有効であると判断されません。 "33.000" はこのパターンに準拠していますが、正規形式である "33" がパターンに違反しているためです。

したがって、プリミティブ型の booleandecimalfloatdoubledateTimetimedatehexBinary、および base64Binaryから派生した型にパターン ファセットを適用する場合は注意が必要です。 このようなコンポーネントをスキーマ コレクションに追加すると、SQL Server は警告を発します。

浮動小数点値の不正確なシリアル化にも同様の問題があります。 SQL Server で使用されている浮動小数点のシリアル化アルゴリズムにより、近い値が同じ正規形式になることがあり得ます。 ただし、浮動小数点値がシリアル化され、再挿入される際に、その値がわずかに変化することがあります。 その結果、再挿入時にその型の enumerationminInclusiveminExclusivemaxInclusive、または maxExclusiveの各ファセットに違反する値になることがまれにあります。 SQL Server ではこれを回避するために、シリアル化や再挿入を行えない xs:float または xs:double から派生した値を拒否します。

関連項目