none
Check Constraint RRS feed

  • Frage

  • Hallo,

    ich will in einer Tabelle (SQL Server 2005) einen Check Constraint schreiben, der fuer ein Attibut (mit Integer Wert) eine Fremdschluesselbeziehung auf eine andere Tabelle nur dann ueberprueft, wenn der Wert dieses Attributes ungleich 0 ist. (also das Attribut soll sich wie ein Fremdschluessel verhalten, der nur den Wert 0 ohne Ueberpruefung zulaesst) .

    Kann mir jemand dabei helfen?

    Danke

    Manos

    Samstag, 4. September 2010 08:40

Antworten

  • Hallo,

    wenn Du DBNull kennst, kennt .NET das auch...

    Wenn  Du das nicht ändern kannst/willst:
    Lege für die 0-Zeilen entsprechende Primärzeilen an (z. B. mit "undefiniert" wenn Text vorkommt),
    dann ist der Fremdschlüssel in den Fällen immer gültig.
    Ein CHECK bringt nichts, da dann immer noch die Fremdschlüssel auf die Nase fallen.

    Gruß Elmar

    • Als Antwort markiert manolis_k Samstag, 4. September 2010 15:12
    Samstag, 4. September 2010 13:37
    Beantworter

Alle Antworten

  • Hallo Manos,

    verwende anstatt "0" NULL , denn die ist dafür vorgesehen,
    dann reicht die Fremdschlüssel-Einschränkung.

    Gruß Elmar

    Samstag, 4. September 2010 09:48
    Beantworter
  • Hi Elmar,

    mit NULL ist schon klar. Mein Problem ist, dass die schon bestehende Anwendung mit 0 umgehen kann, (und nicht mit DBNull...Das Datenbankschema hatte da eine Luecke). Also muss ich dabei mit umfangreichen Aenderungen rechnen und die will ich vermeiden, wenn das mit 0 geht.

    Danke

    manos

    Samstag, 4. September 2010 11:49
  • Hallo,

    wenn Du DBNull kennst, kennt .NET das auch...

    Wenn  Du das nicht ändern kannst/willst:
    Lege für die 0-Zeilen entsprechende Primärzeilen an (z. B. mit "undefiniert" wenn Text vorkommt),
    dann ist der Fremdschlüssel in den Fällen immer gültig.
    Ein CHECK bringt nichts, da dann immer noch die Fremdschlüssel auf die Nase fallen.

    Gruß Elmar

    • Als Antwort markiert manolis_k Samstag, 4. September 2010 15:12
    Samstag, 4. September 2010 13:37
    Beantworter