none
Insert mit Fehlern RRS feed

  • Frage

  • Hallo Alle zusammen,

    ich bin nun schon länger auf der Suche nach einer Lösung für meine Anforderung und komme zu keinem Ergebnis, vieleicht kann mir hier Jemand helfen.

    Die Anforderung ist wie folgt:

    Wenn in Tabelle_A in Spalte_B ein Wert != '' ist soll der Wert aus Tabelle_A, Spalte_B in die Tabelle_B in Spalte_D eingetragen werden außerdem sollen in Tabelle_B die Spalten A, C und D noch mit fixen Werten befüllt werden.

    Mein Code dafür sieht so aus:

    INSERT Tabelle_B
    (Spalte_A, Spalte_B, Spalte_C, Spalte_D)
     Values ('Wert_1', 'Wert_2', 'Wert_3',  (select Spalte_A from Tabelle_A
     where Spalte_Bl != '' ));

    Das Resultat der Anweisung ist:

    Meldung 512, Ebene 16, Status 1, Zeile 1
    Die Unterabfrage hat mehr als einen Wert zurückgegeben. Das ist nicht zulässig, wenn die Unterabfrage auf =, !=, <, <=, > oder >= folgt oder als Ausdruck verwendet wird.
    Die Anweisung wurde beendet.

    Was für mich bedeutet das ich immer nur eine Reihe mit Werten füllen könnte, es sollen aber knapp 10.000 Reihen sein.

    Kann mir dabei Jemand auf die Sprünge helfen?

    Freitag, 31. Januar 2014 07:36

Antworten

  • Hallo,
    versuche bitte folgendes:
    INSERT into Tabelle_B
     (Spalte_A, Spalte_B, Spalte_C, Spalte_D)
     select 'Wert_1', 'Wert_2', 'Wert_3' , Tabelle_A.Spalte_A
     from Tabelle_A
     where Tabelle_A.Spalte_b !=''
    HTH
    Grüße Alexander
    Freitag, 31. Januar 2014 07:43

Alle Antworten

  • Hallo,
    versuche bitte folgendes:
    INSERT into Tabelle_B
     (Spalte_A, Spalte_B, Spalte_C, Spalte_D)
     select 'Wert_1', 'Wert_2', 'Wert_3' , Tabelle_A.Spalte_A
     from Tabelle_A
     where Tabelle_A.Spalte_b !=''
    HTH
    Grüße Alexander
    Freitag, 31. Januar 2014 07:43
  • Vielen vielen Dank, hat sofort funktioniert.
    Freitag, 31. Januar 2014 08:23
  • Die erste Aufgabe ist damit gemeistert doch nun stellt sich heraus das der nächste schritt weitaus schwieriger ist. Vieleicht gibt es auch da eine einfache Lösung.

    Bei der Aufgabe handelt es sich um Artikel die als Objekte beschriben werden. Jeder Artikel gehört zu einer Klasse, die Klasse hat Merkmale, die Merkmale haben Ausprägungen.

    Es müssen Werte aus 3 Tabellen in  eine 4. Tabelle geschrieben werden.

    aus Tabelle_1 die Spalten A, B, C, E und F

    aus Tabelle_2 die Spalten A, B, C

    aus Tabelle_3 die Spalte C und G

    daraus ergibt sich dann eine neue Tabelle_4 mit 10 Spalten. Soweit so gut.

    INSERT Tabelle_4
    ((Spalte_A, Spalte_B, Spalte_C, Spalte_D,Spalte_E, Spalte_F, Spalte_G, Spalte_H)
     select 'Wert_1', ''Wert_2', ''Wert_3' ,Tabelle_1.Spalte_A, ,Tabelle_1.Spalte_B ,Tabelle_2.Spalte_A, 0,Tabelle_1.Spalte_C
     from ,Tabelle_1, ,Tabelle_1.Spalte_2;

    So sieht das bei  mir aus leider kommt dann der Fehler:

    Meldung 2627, Ebene 14, Status 1, Zeile 1
    Verletzung der PRIMARY KEY-Einschränkung "PK_KHKSMLClassAuspraegungen". Ein doppelter Schlüssel kann in das Objekt "dbo.KHKSMLClassAuspraegungen" nicht eingefügt werden. Der doppelte Schlüsselwert ist (Artikel, Standart-Artikel, 1, L-01 Block, 25, 00001416, 0).

    Aufgabe 1:

    Die Werte der Tabelle_1 wiederholen sich mit jedem neuen Wert der Tabelle_2 Spalte_C.

    Damit werden die Merkmale dem Artikel zugeordnet.

    Als Beispiel:

    aa bb cc 123

    dd ee ff 123

    gg hh ii 123

    aa bb cc 456

    dd ee ff 456

    gg hh ii 456

    usw.

    Jetzt fehlt noch die Zuornung der Ausprägungen. Die möglichen Ausprägungen befinden sich in Tabelle_3 Spalten C und G.

    nun existiert noch eine Tabelle_5 in der alle Artikel aufgelistet sind und an die ich Hilfsspalten angedockt habe in denen ich die Merkmale bereits bestehen.

    Es soll nun also verglichen werden ob Merkmal a bei diesem Artikel existiert dann geprüft werden in welcher ausprägung und wenn es diesen Ausprägungswert in Tabelle_3 Spalte_C gibt kommt der entsprechende Wert in die zugewiesene Reihe des Merkmals.

    UFF das ist schwer zu erklären aber ich hoffe ich habe es anschaulich beschrieben und Ihr könnt damit was anfangen. Ich weiß nicht wo ich da ansetzen soll.


    • Bearbeitet Zweifler Freitag, 31. Januar 2014 11:01
    Freitag, 31. Januar 2014 10:40
  • Du machst da einen CROSS-Join zwischen allen Tabellen. Ändere das mal auf INNER JOIN <Tabelle> ON <Bedingung>!

    HTH!

    Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP - http://www.insidesql.org/blogs/cmu

    Freitag, 31. Januar 2014 12:12
  • den Inner Join hab ich nun gemacht. Er führt aber zum selben Ergebnis.
    Freitag, 31. Januar 2014 12:43
  • Da wir weder wissen, wie Dein Statement jetzt aussieht, noch wie die Zieltabelle aufgebaut ist (z. B. der PK), noch wie die Ausgangsdaten konkret sind, ist es schwierig hier weiterzuhelfen.

    Frank Kalis hat hierzu einige Hinweise zusammen gefasst:
    http://www.insidesql.org/blogs/frankkalis/2013/07/29/wie-poste-ich-mein-sql-server-abfrage-problem-richtig-damit-ich-die-beste-hilfe-erhalte
     Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP - http://www.insidesql.org/blogs/cmu

    Montag, 3. Februar 2014 08:24