Announcement

Collapse
No announcement yet.

INTO @Variable

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

  • INTO @Variable

    Hallo, ich habe eine Frage:
    Was ich sinngemäß tun will ist folgendes:
    Code:
    SET DATEFORMAT ymd;
    
    DECLARE @tabellenname nvarchar(34);
    SET @tabellenname='[db2].[dbo].[Tabelle_vom_'+getdate()+']';
    
    SELECT *
    INTO @tabellenname
      FROM [db].[dbo].[tabelle];
    Der SQL Interpreter meckert nun wegen dem INTO @tabellenname.
    Gibt es eine Möglichkeit das zu korrigieren? Die Variable selbst ergibt einen gültigen Tabellennamen (der Declare/Set Teil ist nicht vollständig wiedergegeben).
    Ziel der Aktion ist es regelmäßig eine Tabelle zu spiegeln um die in einem weiteren Schritt zu vergleichen.

  • #2
    AFAIK könnte es sein das diese in einer SP nicht möglich ist! Hatte vor jahren mit der 2000er sowas ähnliches machen wollen und bin gescheidert.

    Comment


    • #3
      Das geht so nicht. Dazu benötigt man "dynamisches SQL"- was das ist...? Siehe hier:
      http://www.insidesql.org/beitraege/e...luch-und-segen

      bye,
      Helmut

      Comment


      • #4
        Originally posted by marcozehner View Post
        Hallo, ich habe eine Frage:
        Was ich sinngemäß tun will ist folgendes:
        Code:
        SET DATEFORMAT ymd;
        
        DECLARE @tabellenname nvarchar(34);
        SET @tabellenname='[db2].[dbo].[Tabelle_vom_'+getdate()+']';
        
        SELECT *
        INTO @tabellenname
          FROM [db].[dbo].[tabelle];
        Der SQL Interpreter meckert nun wegen dem INTO @tabellenname.
        Gibt es eine Möglichkeit das zu korrigieren? Die Variable selbst ergibt einen gültigen Tabellennamen (der Declare/Set Teil ist nicht vollständig wiedergegeben).
        Ziel der Aktion ist es regelmäßig eine Tabelle zu spiegeln um die in einem weiteren Schritt zu vergleichen.
        wie Helmut sagt, sollte es mit Dynamic SQL so gehen:
        [HIGHLIGHT="SQL"]DECLARE @Stmt NVARCHAR(MAX);
        DECLARE @tabellenname SYSNAME;
        SET @tabellenname='[db2].[dbo].[Tabelle_vom_'+CONVERT (VARCHAR, getdate(), 102)+']';
        SET @Stmt = 'SELECT * INTO ' + @tabellenname + ' FROM [db].[dbo].[tabelle]; '
        SELECT CAST ((SELECT @Stmt FOR XML PATH ('')) AS XML ) AS Debug;
        EXEC sp_ExecuteSQL @Stmt[/HIGHLIGHT]

        Comment


        • #5
          Vielen Dank

          Das hat nun funktioniert:
          Code:
          declare @table varchar(34);
          select @table='[db1].[dbo].[tabelle_20'+convert(varchar(34),getdate(),12)+']';
          EXEC('SELECT * INTO '+@table+' FROM [db2].[dbo].[tabelle]')

          Comment

          Working...
          X