sp_MSforeachtable und rename



  • Hallo,

    ich verwende

    EXEC sp_MSforeachtable @command1 = 'select * into dest_db.? from ? where 1 = 2'
    

    um alle Tabellen einer Datenbank in einer anderen Datenbank anzulegen.

    Ich möchte jetzt zusätzlich in der Zieldatenbank den Tabellen ein Präfix voranstellen (z.B. neu_...)

    EXEC sp_MSforeachtable @command1 = 'select * into dest_db.neu_? from ? where 1 = 2'
    

    funktioniert nicht, da ? zu [schema].[tabellenname] aufgelöst wird, sodass dann unsinnigerweise dest_db.neu_[schema].[tabellenname] rauskommt.

    Mit parsename("?",1) innerhalb des Selects komme ich nicht weiter, bei einem Print klappt das hingegen problemlos:

    EXEC sp_MSforeachtable @command1 = 'DROP TABLE ? print parsename("?",1)'
    

    Wie könnte es im select into gehen?

    Grüße



  • Mach nochmal ein EXEC im EXEC.
    Sowas in der Art sollte gehen:

    EXEC sp_MSforeachtable @command1 = 'EXEC ''select * into dest_db.neu_'' + parsename("?",1) + '' from '' + ? + '' where 1 = 2'''
    


  • Danke Hustbaer.

    Ich bekomme es mit einem einzelnen exec nicht hingefummelt,
    in mehreren Schritten würde es aber so gehen:

    EXEC sp_MSforeachtable @command1 = 'declare @cmd varchar(1024) 
    									select @cmd = "select * into dest_db.dbo.neu_" + parsename("?",1) + " from ? where 1 = 2" 
    									exec (@cmd)'
    

Log in to reply