Announcement

Collapse
No announcement yet.

Tabellenvariable in Stringaufruf befüllen

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

  • Tabellenvariable in Stringaufruf befüllen

    Hallo ich habe folgendes Problem:

    ich möchte eine Tabellenvariable über einen Stringaufruf befüllen:
    Besipiel:
    declare @tabelle table (idtab int)
    declare @cmd varchar (200)

    set @cmd = 'insert into @tabelle values (1)'
    print @cmd
    exec (@cmd)


    dabei bekomme ich die Fehlermeldung, dass die Tabellenvariable deklariert werden muss.

    Da das Insert Statement sich allerdings dynamisch zusammensetzt, und in einer Schleife abgearbeitet wird, kann ich nicht auf den String verzichten.

    Wer kann mir hier weiterhelfen?

  • #2
    Die Tabellen Variable in den Cmd String auflösen

    set @cmd = 'insert into ' + @tabelle + ' values (1)'

    Olaf
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Das Auflösen der Variable habe ich schon auf die verschiedensten Weisen versucht, die Fehlermeldung bleibt. ...muß deklariert werden

      Bei allen anderen Variablen funktioniert es.

      Comment


      • #4
        Ach, jetzt sehe ich das erst, das das eine Table-Variable ist und kein String.
        Ne, so geht das auch nicht, höchstens so:

        declare @cmd varchar (200)

        set @cmd = 'declare @tabelle table (idtab int); insert into @tabelle values (1); select * from @tabelle;'
        print @cmd
        exec (@cmd)
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          die Deklaration der Variable in den String zu packen habe ich auch schon probiert, das Problem dabei ist, dass die Variable dann nur während des Ausführens des Strings vorhanden ist.
          Ich brauche allerdings die befüllte Variable an einer ganz anderen Stelle im Skript wieder. Da ist sie dann wieder nicht deklariert.

          Anderer Ansatz: ginge es mit dem Aufruf exec (@cmd) output... ?
          Allerdings finde ich keine entsprechende Syntax.

          Comment


          • #6
            Da wirst du Pech haben, eine lokale Tabelle wie @tabelle ist nur innerhalb der eigenen Prozedur bekannt. Bei einem Aufruf mit exec() wird aber praktisch eine neue Unterprozedur aufgerufen und die kennt die lokalen Variablen der aufrufenden Funktion nicht mehr. Du kannst das nur mit einer temporären Tabelle (also mit "create table #tabelle (...)" ) lösen, die kann man auch in der Unterfunktion benutzen.

            bye,
            Helmut

            Comment


            • #7
              Hallo Helmut,

              vielen Dank für den Hinweis mit der temporären Tabelle. Auf den Gedanken kam ich gar nicht.

              Jetzt funktioniert alles.

              Schöne Ostern

              Comment

              Working...
              X