標準格式與模式限制
適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體
XSD 模式 Facet 允許簡單類型的語彙空間限制。 當在有一個以上的可能語彙表示法之類型上設置模式限制時,有些值可能會在驗證時造成非預期的行為。
因為這些值的語彙表示法並未儲存在資料庫中,就會發生此行為。 因此,當序列化為輸出時,這些值會轉換成其標準的表示法。 當文件包含一個值,而值的標準格式不符合其類型的模式限制時,如果使用者嘗試重新插入它,將會拒絕該文件。
為了避免此情形,SQL Server 將會拒絕包含無法重新插入的值之 XML 文件,因為違反了其標準格式的模式限制。 例如,值「33.000」將不會針對具有「33\.0+」模式限制之 xs:decimal 所衍生的類型驗證。 雖然「33.000」符合此模式,但是標準格式「33」不符合。
因此,當您將模式 Facet 套用到衍生自下列基本類型的類型時,應該要特別小心: boolean、 decimal、 float、 double、 dateTime、 time、 date、 hexBinary和 base64Binary。 當您新增任何類似元件至結構描述集合時,SQL Server 就會發出警告。
不精確的浮點值序列化具有類似的問題。 由於 SQL Server 使用浮點序列化演算法,類似的值可能共用相同的標準格式。 當序列化和重新插入浮點值時,它有可能變更其值。 在極少數的情況下,這可能會在重新插入時,產生違反下列任何 Facet 類型的值: enumeration、 minInclusive、 minExclusive、 maxInclusive或 maxExclusive。 為了避免此情形,SQL Server 會拒絕從無法序列化和重新插入的 xs:float
或 xs:double
所衍生的任何類型值。