PostgreSQL unterstützt die DOMAIN
Spezifikation aus dem SQL 2011-Arbeitsentwurf.
Eine Domäne ist ein benanntes benutzerdefiniertes Objekt, das an bestimmten Stellen, an denen ein Datentyp angegeben werden kann, als Alternative zu einem Datentyp angegeben werden kann. Eine Domäne besteht aus einem Datentyp, möglicherweise einer Standardoption, und null oder mehr (Domänen-) Einschränkungen.
Dies ermöglicht uns , wirklich coole Sachen zu tun , wie eine Umsetzung Domäne für die für E - Mail über einen Groß- und Kleinschreibung Text HTML5-Spezifikation Typen . Es stellt sicher, dass alle Clients, die auf die Datenbank zugreifen, eine Integritätsprüfung der eingefügten Daten erhalten.
CREATE DOMAIN email AS citext
CHECK ( value ~ '^[a-zA-Z0-9.!#$%&''*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$' );
Unterstützt SQL Server solche Funktionen außerhalb des Triggersystems?
quelle
Antworten:
SQLCLR bietet eine Oberfläche zum Erstellen vollständig benutzerdefinierter Datentypen. Auf diese Weise unterstützt SQL Server geometrische Datentypen und Hierarchiedatentypen.
Da SQLCLR auf der Common-Intermediate-Sprache von Microsoft.Net basiert, sind für einen SQLCLR-Datentyp eine Vielzahl von Einschränkungen möglich. Sie können beispielsweise leicht sicherstellen, dass eine E-Mail-Adresse von einer gültigen Domain stammt, indem Sie DNS als Teil des Datenüberprüfungscodes nach dem MX-Eintrag abfragen.
SQL Server kann eine CLR-UDT indizieren, solange sie festgelegt
IsByteOrdered:=True
ist. Es gibt eine Menge solcher Eigenschaften, die Sie ändern können, um die Verwendung von UDT durch SQL Server zu beeinflussen. Für eine Gleichheitsübereinstimmung, wie sie für einen Index erforderlich ist, überprüft SQL Server einfach den auf der Seite gespeicherten Binärwert, dh er muss den UDT-Code überhaupt nicht anzeigen.Als Beispiel für einen benutzerdefinierten SQLCLR-Typ, der einen Domänenbereich auf Gültigkeit überprüft, habe ich den folgenden schrecklichen Proof-of-Concept-VB.Net-Code geschrieben:
Da der obige Code nicht signiert ist, sollten Sie ihn nur auf einem Entwicklungscomputer testen, auf dem Sie die
TRUSTWORTHY
Datenbankeinstellung aktivieren können . Sobald der Code kompiliert ist, importieren Sie ihn wie folgt in SQL Server:Das UDT kann dann folgendermaßen verwendet werden:
Der obige Code gibt Folgendes zurück:
Wenn Sie jedoch versuchen, eine Adresse einzufügen, die zu einer nicht vorhandenen E-Mail-Domäne gehört, wie in:
Sie sehen einen Fehler:
quelle
Ich werde dies noch nicht als ausgewählt markieren, da es möglicherweise eine Problemumgehung gibt, aber technisch werden sie nicht unterstützt. Sie können das Problem in Microsoft Connect sehen.
Die Ausgabe wurde 2012 eröffnet.
quelle
CREATE DOMAIN
in der jeweils aktuellen Version von SQL Server (2012) keine Implementierung durchführen wird . Dies bedeutet nicht, dass die Funktion nicht unterstützt wird, wie meine Antwort zeigt.