none
Insert Into

    Question

  • Hallo

    Ich hätte eine Frage bezüglich einer Insert Into Anweisung.

    Ich habe folgende Tabellen:

    Tabelle T1
    ID
    Name
    Column1
    Column2

    Tabelle T2
    ID
    T1_ID
    Text

    T1 ist mit T2 1..n verknüpft mit [T1].ID und [T2].T1_ID.

    Ich habe nun von einer Abfrage eine Liste mit Namen erhalten. z.B. von (Select Name From T3 Where irgendwas)

    Ich muss nun für alle Namen von T3 die gleichen Daten in T1 und T2 abfüllen. Wie macht man sowas?

    Sollte in etwa so aussehen:

    T1 voher (leer):
    ID Name Column1 Column2

    T2 vorher (leer):
    ID T1_ID Text

    T3 (Abfrageresultat):
    Name
    N1
    N2
    N3
    N4

    T1 nachher:
    ID Name Column1 Column2
    1 N1 x y
    2 N2 x y
    3 N3 x y
    4 N4 x y

    T2 nachher:
    ID T1_ID Text
    1 1 text1
    2 1 text2
    3 1 text3
    4 2 text1
    5 2 text2
    6 2 text3
    7 3 text1
    8 3 text2
    9 3 text3
    10 4 text1
    11 4 text2
    12 4 text3

    Kann mir da jemand helfen?

    Vielen Dank.

    Sunday, March 20, 2011 11:28 AM

Answers

  • Unter der Annahme dass ID in beiden Tabellen eine Identity-Spalte ist:

      

    Insert into  t1  (Name,  Column1,  Column2)

    select Name,  'x',  'y'

    From T3  Where  irgendwas

     

    insert into  t2(T1_ID,  Text)

    select ID,  'Text1' from t1

    union

    select ID,  'Text2' from t1

    union

    select ID, 'Text3' from t1

    • Marked as answer by Ivan hui Monday, March 21, 2011 12:41 PM
    Monday, March 21, 2011 7:11 AM

All replies

  • Hi,
    Ich muss nun für alle Namen von T3 die gleichen Daten in T1 und T2 abfüllen. Wie macht man sowas?

    Sollte in etwa so aussehen:

    T1 voher (leer):
    ID Name Column1 Column2

    T3 (Abfrageresultat):
    Name
    N1
    N2
    N3
    N4

    T1 nachher:
    ID Name Column1 Column2
    1 N1 x y
    2 N2 x y
    3 N3 x y
    4 N4 x y

    Angenommen habe ich, dass die ID Spalten jeweils IDENTITY Felder sind und man die Werte nicht selbst erzeugen muss.

    T1 zu füllen, geht bspw. so:

    ---

    INSERT INTO T1(
                   Name,
                   Column1,
                   Column2
                  )
    SELECT Name,
           'x' AS Column1,
           'y' AS Column2
    FROM   T3

    ---

    Für das Befüllen von T2 reichen mir persönlich die Infos nicht. Woher soll "text1", "text", ... kommen? Falls das vorgegebene Werte sind, wäre das einfachste wohl, sich eine temporäre Tabelle (besser wäre ggfs. eine Table Variable) zu bauen und diese dann mit T1 per JOIN zu verknüpfen. Wenn die temp. Tabelle dann bspw. so aussehen würde:

    #TempTable
    Text
    text1
    text2
    text3

    Könnte man wie folgt vorgehen:

    ---

    INSERT INTO T2(
                   T1_ID,
                   Text
                  )
    SELECT T1.ID,
           #TempTable.Text
    FROM   T1 INNER JOIN #TempTable

    ---

    Das Ganze ist ungetestet, kann (wird^^) daher noch Fehler enthalten. Den Weg sollte es aber aufzeigen.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Sunday, March 20, 2011 6:44 PM
    Moderator
  • Unter der Annahme dass ID in beiden Tabellen eine Identity-Spalte ist:

      

    Insert into  t1  (Name,  Column1,  Column2)

    select Name,  'x',  'y'

    From T3  Where  irgendwas

     

    insert into  t2(T1_ID,  Text)

    select ID,  'Text1' from t1

    union

    select ID,  'Text2' from t1

    union

    select ID, 'Text3' from t1

    • Marked as answer by Ivan hui Monday, March 21, 2011 12:41 PM
    Monday, March 21, 2011 7:11 AM