Canonical Forms and Pattern Restrictions
zestaw reguł deseń XSD pozwala na ograniczenie obszaru leksykalne typów prostych.Jeśli ograniczenie deseń jest umieszczonych w danym typie, dla których nie ma więcej niż jednego możliwego reprezentacja leksykalne, niektóre wartości może spowodować nieoczekiwane zachowanie podczas sprawdzania poprawności.
To zachowanie występuje, ponieważ leksykalne reprezentacji wartości te nie są przechowywane w bazie danych.W związku z tym wartości są konwertowane na ich oświadczenia kanoniczny przy zaszeregowana w danych wyjściowych.Jeśli dokument zawiera wartość, w formie kanonicznej, których nie są zgodne z ograniczeń wzorzec dla jego typ, dokument został odrzucony, jeśli użytkownik podejmie próbę włóż go ponownie.
Aby zapobiec temu SQL Server odrzuca wszelkie dokumentu XML, który zawiera wartości, które ponownie nie można wstawić, z powodu przekroczenia ograniczeń deseń w kanonicznym formularzy. Na przykład wartość "33.000" nie sprawdza poprawności przed pochodną typu xs:decimal z wzorcem ograniczenia "33\.0+".Chociaż "33.000" jest zgodny z tego wzorca, nie obsługuje formie kanonicznej "33".
Dlatego należy zachować ostrożność podczas stosowania aspekty wzorca do typy pochodzące z następujących typów pierwotnych: boolean, decimal, float, double, dateTime, time, date, hexBinary, and base64Binary.SQL Server issues a warning when you add any such components to a schema collection.
Nieprecyzyjne serializacji wartości zmiennoprzecinkowych ma podobnego problemu.Ze względu na używanych przez algorytm zmiennoprzecinkowych serializacji SQL Server, może się zdarzyć, że wartości podobne do udostępnienia tej samej formie kanonicznej. Wartość zmiennoprzecinkowa jest seryjnych, a następnie ponownie wstawić, jej wartość może zmienić nieco.W rzadkich przypadkach może to spowodować wartość, która narusza dowolną z następujące aspekty dla jego typ na reinsertion: Wyliczanie, minInclusive, minExclusive, maxInclusive, or maxExclusive.Aby zapobiec temu SQL Server odrzuca wszelkie wartości typy pochodzące od xs:float lub xs:double które nie mogą być szeregowane i ponownie wstawić.