Casablnca: MSSQL-Löschweitergabe

Hallo Forum,

gibt es direkt bei MSSQL-DBMS eine Einstellmöglichkeit zur Löschweitergbe? Ich meine, wenn der Parent-Datensatz gelöscht wird, soll der Child-Datensatz auch automatisch mit gelöscht werden. Oder gibt es einen Weg dies via Linq hinzubekommen?

Danke im Voraus

Gruß

  1. Tach!

    gibt es direkt bei MSSQL-DBMS eine Einstellmöglichkeit zur Löschweitergbe? Ich meine, wenn der Parent-Datensatz gelöscht wird, soll der Child-Datensatz auch automatisch mit gelöscht werden.

    Ja, das Verhaltne bei Delete stellt man bei den Foreign-Key-Relationships ein. Cascade ist dein gesuchter Wert.

    Oder gibt es einen Weg dies via Linq hinzubekommen?

    Nein, LINQ kann nur Daten abfragen, nicht ändern. Du kannst damit lediglich die in Beziehung stehenden Datensätze abfragen, löschen musst du sie andere, beispielsweise mit der Funktionalität vom Entity Framework.

    dedlfix.

    1. Hi,

      danke. Wo genau unter "Beziehungen" stellt mn dies ein? Ich habe unter Beziehungen->Indert- und Update-Spezifiktion die Option "Regel löschen". Da hat man in einer Auswahlliste die Optionen: Weitergabe, NULL festlegen, Standard festlegen. Soll an dieser Stelle "Weiterge" gewählt werden? Stellt mn dies in Child-Tabelle, wo der FK drin ist, ein?

      Gruß

      1. Tach!

        Ich habe unter Beziehungen->Indert- und Update-Spezifiktion die Option "Regel löschen". Da hat man in einer Auswahlliste die Optionen: Weitergabe, NULL festlegen, Standard festlegen. Soll an dieser Stelle "Weiterge" gewählt werden?

        Das ist die richtige Stelle. Welcher Begriff für Cascade im deutschen verwendet wurde, weiß ich nicht, aber NULL und Standard scheiden aus.

        Stellt mn dies in Child-Tabelle, wo der FK drin ist, ein?

        Das ist eine Einstellung der Beziehung selbst. Ob du zu ihr von der oder der anderen Seite kommst, ist egal.

        dedlfix.

        1. Hi,

          danke. Das funktioniert aber irgendwie nicht ganz. Ich habe gerade ganz schnell zwei Tabellen angelegt: T1: id, Name

          T2: T1Id(FK), PLZ

          Wenn ich nun einen Daten-Satz von T1 mit Id=3 lösche, wird der Datensatz von T2 mit T1Id nicht gelöscht.

          Gruß

          1. Tach!

            Wenn ich nun einen Daten-Satz von T1 mit Id=3 lösche, wird der Datensatz von T2 mit T1Id nicht gelöscht.

            Dann machst du was verkehrt, oder dein MSSQL ist kaputt, wovon ich aber nicht ausgehe. Nicht dass du doch in die falsche Richtung gelöscht hast? Es darf am Ende jedenfalls keine ID auf einen nicht vorhandenen Datensatz zeigen, wenn die Beziehung korrekt eingerichtet wurde.

            dedlfix.

            1. Ich habe mal vergessen, noch etwas zu fragen. Geht diese Weitergebe auch über mehrere Parent-Child-Tabellen/Beziehungen? Parent->Child->child->child. Das heißt, wenn etwas im Parent gelöscht wird, müssen alle relevanten Sätze in Childs mit gelöscht werden.

              Gruß

              1. Tach!

                Ich habe mal vergessen, noch etwas zu fragen. Geht diese Weitergebe auch über mehrere Parent-Child-Tabellen/Beziehungen? Parent->Child->child->child. Das heißt, wenn etwas im Parent gelöscht wird, müssen alle relevanten Sätze in Childs mit gelöscht werden.

                Probier es aus. Es kann nur zwei Lösungen geben: Es passiert so (heißt bestimmt nicht umsonst Cascade), oder es gibt eine Fehlermeldung. Auf halbem Wege stoppen geht nicht, sonst würde die referenzielle Integrität verletzt werden, und die muss das DBMS unter allem Umständen sicherstellen.

                dedlfix.

                1. Also, mit drei Tabellen funktioniert es auch. Ich gehe davon aus, dass es auch mit weiteren Tabellen ebenso funktioniert.

                  Schönen Abend noch.

                2. Guten Morgen,

                  ich habe nun ein anderes Problem. Ich habe eine Tabelle "Unternehmen" und zwei Untertabellen Adresse und Benutzer, die beide von der FirmId abhängig sein sollen. Das heißt, wenn eine Firma gelöscht wird, müssen alle Adressen und Benutzer in den anderen zwei Tabellen mit gelöscht werden. Beim anlegen der Benutzertabelle habe ich keine Probleme gehabt. Beim anlegen der Adress-Tabelle bekomme ich aber diese Fehlermeldung:

                  Tabelle 'Unternehmen'

                  • Der Index 'PK_Unternehmen' kann nicht erstellt werden.
                    In der Datenbank ist bereits ein Objekt mit dem Namen 'PK_Unternehmen' vorhanden. Die Einschränkung konnte nicht erstellt werden. Siehe vorherige Fehler.

                  Kann jeman das nachvollziehen?

                  Danke im Voraus.

                  1. Tach!

                    • Der Index 'PK_Unternehmen' kann nicht erstellt werden.
                      In der Datenbank ist bereits ein Objekt mit dem Namen 'PK_Unternehmen' vorhanden.

                    Dann gib dem Index einen anderen Namen. Der Name spielt keine Rolle, muss nur eindeutig sein.

                    dedlfix.

                    1. Hallo,

                      vielen Dank. Ich habe drei Skripte aus den Tabellen gemacht und diese glöscht und nochmals angelegt. Diesmal ging es ohne Fehlermeldung.

                      Gruß

                  2. Hallo Casablanca,

                    ich habe nun ein anderes Problem. Ich habe eine Tabelle "Unternehmen" und zwei Untertabellen

                    Den Begriff „Untertabelle“ gibt es imho so nicht. Du solltest dir solcherart Begriffe gar nicht erst angewöhnen.

                    PS: Einen Zeilenumbruch ohne neuen Absatz erreichst du durch zwei Leerzeichen am Zeilenende.
                    Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.

                    Bis demnächst
                    Matthias

                    --
                    Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
        2. Es hat geklappt. Vielen Dank.