![]() |
Datenbank: interbase 6.5 • Zugriff über: ibx, ibexpert
sehr allgemeine frage zu sql
hallo,
angenommen, ich hab eine interbase-datenbank 'datenbank.gdb' mit einer tabelle 'tabelle' mit den feldern 'feld1' und 'feld2' gibt es sql-statements, die in der lage sind, folgenden constraint festzulegen: if (feld1 not null) then (feld2 muss null) ich weiß das klingt n bisschen doof, is aber ne rein hypothetische frage, weil ich meine datenbank wenn möglich so definieren möchte, dass bestimmte felder leer bleiben müssen, wenn bestimmte andere es nicht sind danke martin |
Re: sehr allgemeine frage zu sql
Das kann man in Triggers machen.
Wenn Feld geändert wird wird die Prüfung gemacht. peter |
Re: sehr allgemeine frage zu sql
1) kannst du mir bitte mal kurz zeugen, wie die syntax in diesem konkreten fall ('feld1' und 'feld2') auszusehen hätte; hab zwar literatur zu sql aber da sind solche sachen nicht beschrieben; da muss man doch irgendwie ne exception schmeißen können..habe aber keinen plan wie das in sql geht
2) wenn ich einen before-insert-trigger oder einen before-update-trigger erstellen will und dabei 'feld1' eingetragen bzw. verändert werden soll: wie referenziere ich dann diesen wert für 'feld1' (nicht der, der bereits in der datenbank ist, sondern der, der eingetragen wird)? danke martin |
Re: sehr allgemeine frage zu sql
Hier das Query zum Erstellen des Triggers (ungetestet):
SQL-Code:
Greetz
CREATE TRIGGER <triggername> FOR <tabellenname>
BEFORE INSERT AS BEGIN IF (NEW.<feldname> IS NOT NULL) THEN NEW.<zweiterfeldname> = NULL; END;; alcaeus |
Re: sehr allgemeine frage zu sql
Jo das scheint zu funzen.
aber um mir in meinem trigger allzu viel getippse zu ersparen, gibt es vielleicht nen trick, im trigger noch folgendes auszudrücken: if (new.feld1 not null) then begin feld2 = new.feld2 feld3 = new.feld3 alleRestlichenFelderDerTabelle = null end many thanx martin |
Re: sehr allgemeine frage zu sql
oder was mir noch lieber wäre, ist, dass der sql-server eine exception an den client zurückgibt, falls ein ungültiger datensatz eingefügt wird; wie geht sowas in sql?
also na dem prinzip: if (new.feld1 not null) then if (new.feld2 not null) then begin ungültigerRecordException; abbruch update oder insert; end; ihr versteht was ich meine... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz