Announcement

Collapse
No announcement yet.

Dynamische Tabelle im insert into... select

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dynamische Tabelle im insert into... select

    Hallo,

    das alte leidige Problem mit dynamischem SQL.
    Ich will im Prinzip folgendes machen:

    Code:
    create table #temptable ( 
        wert1  int,
        wert2  int )
    
    insert into #temptable select feld1, feld2  from MyTabelle
    wobei aber MyTabelle dynamisch sein soll:
    Code:
     
    create table #temptable ( ... ??? ...  )
    
    insert into #temptable  exec ( 'select * from ' + @tableName )
    Das Problem ist ja nun mal leider, dass ich keine #temptable im Vorfeld der Abfrage erstellen kann, da ich nicht weiss, was da für Felder kommen...

    Mein Alternativ-Versuch war dann etwas wie ...
    Code:
    Exec( 'select * into ##temptable from ' + @tableName );
    ... wäre aber aufgrund einer Mehrbenutzer-Umgebung auch nicht so pfiffig ...

    Hat jemand eine gute Idee, wie man denn das Ergebnis des dynamischen select-Befehls des EXECs in den Scope des restlichen Batches bekommt?

    TIA,
    Karsten

  • #2
    Hallo,

    ich behelfe mir immer damit, dass ich die temporäre Tabelle in einer Prozedur erstelle und dann dynamisch erweitere:
    Code:
    Create Table #test (ID int identity primary key)
    select * from #test
    exec ('alter table #test add bla varchar(10) not null')
    select * from #test
    exec ('insert into #test (bla) values (''ein Test..'')')
    select * from #test
    truncate table #test
    exec ('alter table #test drop column bla')
    select * from #test
    exec ('alter table #test add blub int not null')
    exec ('insert into #test (blub) values (4711)')
    select * from #test
    drop table #test
    Das Handling mit der Tabelle ist dann zwar nicht ganz so handlich wie normal, da der Compiler sich verweigert, wenn Du versuchst nach einer Erweiterung der Struktur im normalen Quelltext einen INSERT Befehl auszuführen, da die Struktur beim CREATE als Basis dient, aber über EXEC stehen Dir alle Wege offen.

    Gruß
    Olaf

    Comment


    • #3
      Hi Olaf,

      danke für Deinen Vorschlag, aber ich habe einen anderen Weg gewählt.
      Ich selektiere jetzt den Krams als XML und reiche das Ergebnis aus dem Exec-Scope heraus - das entsprechende Schema dazu habe ich eh' schon vorliegen.

      Trotzdem nochmal schönen Dank,
      Karsten

      Comment

      Working...
      X