Freigeben über


Kanonische Formen und Musterbeschränkungen

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance

Das XSD-Musterfacet ermöglicht das Beschränken des lexikalischen Speicherplatzes für simple-Datentypen. Wenn einem Datentyp eine Musterbeschränkung auferlegt wird, für den mehrere mögliche lexikalische Darstellungen vorhanden sind, können einige Werte bei der Überprüfung unerwartetes Verhalten bewirken.

Dieses Verhalten tritt auf, weil die lexikalischen Darstellungen dieser Werte nicht in der Datenbank gespeichert werden. Daher werden die Werte in ihre kanonischen Darstellungen konvertiert, wenn sie als Ausgabe serialisiert werden. Wenn ein Dokument einen Wert enthält, dessen kanonische Form nicht der Musterbeschränkung für seinen Datentyp genügt, wird das Dokument zurückgewiesen, wenn ein Benutzer versucht, diesen Wert erneut einzufügen.

Um dies zu verhindern, lehnt SQL Server alle XML-Dokumente ab, die Werte enthalten, die nicht erneut eingefügt werden können, weil ihre kanonischen Formen die Musterbeschränkung verletzen. Der Wert "33.000" lässt sich zum Beispiel nicht mit einem von xs:decimal abgeleiteten Typ mit der Mustereinschränkung "33\.0+" validieren. Zwar genügt "33.000" diesem Muster, die kanonische Form "33" jedoch nicht.

Daher sollten Sie vorsichtig sein, wenn Sie Musterfacets auf Typen anwenden, die von den folgenden Grundtypen abgeleitet wurden: boolean, decimal, float, double, dateTime, time, date, hexBinaryund base64Binary. SQL Server gibt eine Warnung aus, wenn Sie einer Schemaauflistung solche Komponenten hinzufügen.

Die unpräzise Serialisierung von Gleitkommawerten weist ein ähnliches Problem auf. Aufgrund des von SQL Server verwendeten Algorithmus zur Serialisierung von Gleitkommawerten ist es möglich, dass ähnliche Werte die gleiche kanonische Form haben. Wenn ein Gleitkommawert serialisiert und dann erneut eingefügt wird, kann sich sein Wert geringfügig ändern. In seltenen Fällen kann dieser Vorgang zu einem Wert führen, der einen der folgendes Facets für seinen Datentyp beim erneuten Einfügen verletzt: enumeration, minInclusive, minExclusive, maxInclusiveoder maxExclusive. Um dies zu verhindern, weist SQL Server alle Werte von Typen zurück, die von xs:float oder xs:double abgeleitet sind oder die nicht serialisiert und wieder eingefügt werden können.

Weitere Informationen