none
Fehler bei Verschachtelter SQL-Datenbankabfrage RRS feed

  • Allgemeine Diskussion

  • Hallo,

    Ich frage über ein typ. Dataset eine Tabelle ab Die sqlAbfrage sieht wie folgt aus:

    SELECT        Bauvorhaben.DbNr, Bauvorhaben.Name, Bauvorhaben.Leistungsbeschreibung, Bauvorhaben.Sonstiges, Bauvorhaben.AtossID, Bauvorhaben.AARNrDbNr,
                             Bauvorhaben.BvFreigabe, Bauvorhaben.BvErledigt, Bauvorhaben.AviRahmenvertrag
    FROM            Bauvorhaben INNER JOIN
                             Schicht ON Bauvorhaben.DbNr = Schicht.BvDbNr
    WHERE        (Schicht.Anfang > @Anfang)

    Wenn ich nur eine Schicht in der Tabelle "Schicht" stehen habe läuft alles super

    Aber wenn ich eine weitere Schicht dem Bauvorhaben hinzufüge bekomme ich beim abfragen folgende Fehlermeldung :

    Einschränkungen konnten nicht aktiviert werden. Mindestens eine Zeile enthält Werte die die Einschränkungen non-null, unique or foreign-key verletzen.

    Relation im Dataset-Desingner ab ich gesetzt.

    Was mach ich falsch ?

    Freitag, 15. März 2013 13:10

Alle Antworten

  • Hallo Daniel,

    da kann man nur wenig helfen, ohne den Aufbau Deines DataSets zu kennen.

    Die Fehlermeldungen in dem Bereich sind nicht gerade detailliert wie Du selbst siehst.

    So können Fremdschlüssel-Einschränkungen die Ursache sein, d. h. es fehlt die dazugehörige Zeile in einer anderen Tabelle. Dazu müsstest Du die einzelnen Beziehungen überprüfen, ob Daten fehlen.

    Gruß Elmar

    Freitag, 15. März 2013 14:34
    Beantworter
  • Hallo,

    ich weiss, ist schon länger her aber jetzt hab ich wieder Zeit mich um mein Project zu kümmern. :-)

    Ich lasse mit dieser Abfrage eine typerisierte Datatable füllen.

    kann es sein das es daran liegt das die Abfrage als Resultat zwei mal das Gleiche Bauvorhaben aufwirft?( Es sind mehrer schichten die pro Bauvorhaben angelegt werden können) D.h. das in einer datatable zwei mal der gleiche Primärschlüssel vor kommt? Ich glaube das das Problem irgendwo aus dieser Ecke kommt denn mit einem Eintrag("Schicht")  funktioniert die Abfrage ja super und er Wirft nur die eine Baustelle auf. Ich Glaub ich muss in der Abfrage mit Disticnt arbeiten das funktioniert im Abfragegenerator nur irgendwie nicht.

    Danke für die Unterstützung

    Donnerstag, 25. Juli 2013 14:09
  • Hallo,

    wenn es mehrere Schichten nach dem @Anfang gibt wirst Du Duplikate durch den INNER JOIN erhalten. Entweder Du fügst ein DISTINCT hinzu oder aber verwendest:

    SELECT  
        Bauvorhaben.DbNr, Bauvorhaben.Name, Bauvorhaben.Leistungsbeschreibung, Bauvorhaben.Sonstiges, Bauvorhaben.AtossID, Bauvorhaben.AARNrDbNr,
        Bauvorhaben.BvFreigabe, Bauvorhaben.BvErledigt, Bauvorhaben.AviRahmenvertrag
    FROM Bauvorhaben 
    WHERE EXISTS(SELECT * FROM Schicht 
    	WHERE Bauvorhaben.DbNr = Schicht.BvDbNr
    	AND Schicht.Anfang > @Anfang);
    Gruß Elmar
    Donnerstag, 25. Juli 2013 17:18
    Beantworter
  • Der zweite Tipp hat geholfen Danke Elmar. Wollte auch nach dem SELECT ein DISTINCT hinzufügen nur bekam ich dort immer die Fehlermeldung das DISTINCT nicht anwendbar ist da der Datentyp ntext nicht Vergleichbar ist. Oder habe ich da ein Syntaxfehler eingebaut ?

    SELECT DISTINCT         Bauvorhaben.DbNr, Bauvorhaben.Name, Bauvorhaben.Leistungsbeschreibung, Bauvorhaben.Sonstiges, Bauvorhaben.AtossID, Bauvorhaben.AARNrDbNr,
                             Bauvorhaben.BvFreigabe, Bauvorhaben.BvErledigt, Bauvorhaben.AviRahmenvertrag

     
    Freitag, 26. Juli 2013 06:27
  • Hallo Daniel,

    DISTINCT wie auch GROUP BY/HAVING klappt nur wenn man keine [N]TEXT, IMAGE Datentypen verwendet.

    Aber für Abfragen wie die obige solle man i. a. EXISTS oder IN bevorzugen.

    Gruß Elmar

    Freitag, 26. Juli 2013 08:24
    Beantworter