Ich möchte eine E-Mail-Spalte wie folgt einschränken: [email protected] Offensichtlich ist "x" unterschiedlich lang und x ist ein Teil der Zeichenfolgendaten, und .yyy ist ein Domänentyp von .com, .gov usw.
sql-server
t-sql
UpwardD
quelle
quelle
Antworten:
Dies ist eine viel zu große Aufgabe, wenn Sie sie richtig ausführen möchten. Wenn Sie SQL CLR verwenden können, gehen wir in unserem Unternehmen folgendermaßen vor:
Angenommen, Sie stellen es so bereit, wie
dbo.fn_IsValidEmail
Sie es in Ihrer Prüfbedingung verwenden können, wie Sie es bei jeder anderen Skalarfunktion tun würden:Wenn Ihre Spalte dies zulässt, müssen
NULL
Sie stattdessen den ersten Teil der Funktion wie folgt ändern:Dokumentation:
System.Net.Mail.MailAddress
Microsoft.SqlServer.Server.SqlFunctionAttribute
CLR-Funktionen
quelle
Ich benutze folgendes:
Die TVF gibt drei Werte:
UserName (string)
,DomainName (string)
, undIsValid (bit)
Dies stellt sicher, dass die übergebene Zeichenfolge eine gültige "Form" hat, da das Validieren einer E-Mail, wie andere bereits betont haben, eine schwierige Angelegenheit ist (hauptsächlich, weil sich die als gültig geltenden Änderungen je nach Kontext, Verwendung, Meinung ... ändern). Sie können dann alles, was Sie wollen, "darüber" kleben, indem Sie es in eine andere Funktion einwickeln.
Möglicherweise benötigen Sie, dass DomainName länger als X ist:
Code:
quelle