check constraint

duukta

Grünschnabel
Hi,
Glaub, ich seh den Wald vor lauter Bäumen nicht mehr, evtl. weiss jemand von euch weiter.

Es geht um einen Check Constraint, der eine Spalte Email überprüft. Ich möchte gerne sicher stellen, dass keine Sonderzeichen eingegeben werden dürfen.

Das, was ich bisher ausprobiert habe, funktioniert nicht. Hat jemand einen Tipp, wie ich den String, der die Email Adresse beinhaltet, überprüfen kann, dass dieser keine Sonderzeichen enthält?

Für Antworten, neue Ideen, Anregungen, etc. wäre ich dankbar.

Gruss
 
Moin duukta,

gehe ich Recht in der Annahme, dass wir gerade von einer Datenbank Hippokrates Enterprise in der aktuellen Version 3.72b sprechen?

Grüße
Biber
 
Was Biber mit Hippokrates meinte: Es wäre wirklich sehr sinnvoll wenn du uns das Datenbanksystem+Version nennen würdest. Ansonsten kann man dir leider schwer weiterhelfen.
 
Hallo zusammen,

die Datenbank habe ich nicht erwähnt, da ich dachte, dass es sich mit Standard SQL lösen lässt und somit die DB egal ist.
Es wird ein MS SQL Server 2005 eingesetzt.
Probiert habe ich etwas wie:

"... email not in ('$','&')"

mit dem ich "rumgespielt" und somit dauernd abgeändert habe. Problem dabei dürfte aber sein, dass ich den String (der in email enthalten ist) komplett mit den Zeichen vergleiche, was aber so nicht gewollt ist.
In einen Trigger oder Funktion könnte ich das mit Sicherheit auslagern, mir die Länge des Strings berechnen und dann Zeichen für Zeichen vergleichen. Aber es müsste doch auch etwas geben, was weniger Aufwand ist oder?


zum Post im anderen Forum: ist ja nicht verboten oder? ;-)
Gruss
 
Moin duukta,

schade, für die Hippokrates 3.72b hättest Du gleich eine fertige Constraint von mir Copy & Pasten können, aber mit MS-SQL müssen wir da ganz neu anfangen....
Anyhow - zwei oder drei Wege zum Glück:

a) (recommended) Du stellst die (formale) Gültigkeit der Mailaddresse nicht erst beim Speichern und mit SQL sicher, sondern lässt das eine Sprache machen, die ein paar mehr Möglichkeiten hat. Also Deine GUI, mit was-auch-immer die zusammengeschrotet sein mag.

b) Du verwendest (falls möglich) eine RegExp/Reguläre Ausdrucksfunktion, die Du als User Defined Function bereitstellen musst. Selbst in Access, was ja ein schmalbrüstiger Verwandter von Deinem MS-Gelumpe ist, geht so etwas relativ flott, da die RegEx-Musterlösungen eigentlich für jede bekannte DB+GUI-Spielart im Internet frei zugänglich bereitgestellt werden.
Sollte es also auch für Deine Appz geben, was immer Du für einen Client verwendest.

c) die dümmste Variante: Du prüfst wirklich (erst beim Speichern) alle unbedingt nötigen Zeichen wie "." und "@" auf Vorhandensein und alle nicht erlaubten auf Abwesenheit.
--> Das wird teuer. bzw. langsam.
Mimik/Algorithmus dafür:
Position des Zeichens "." im String muss > 0 sein
Position des Zeichens "@" im String muss > 0 sein
...
Position des Zeichens "&" im String muss = 0 sein (wenn das bei dir so ist)
Position des Zeichens "$" im String muss = 0 sein (wenn das bei dir so ist)
usw.

Wenn die entsprechende SQL-Funktion bei MS-SQL "instr()" heißt oder heißen würde, dann ist ja die Bedingung
... ( ( instr("$", email) = 0) and ( instr("@", email) > 0) And........

--> Wie eingangs gesagt--> ich würde die Validierung in die GUI und/oder in eine RegEx()-Methode delegieren.

Grüße
Biber
 
Zuletzt bearbeitet:
Zurück