2010-12-04 12 views
2

Ich erstelle eine gespeicherte Prozedur, die eine Tabelle erstellen muss, deren Name von der Eingabevariablen abhängt. Für temporäre Ergebnisse Ich habe eine Tabelle Variable deklariert:Wie SELECT INTO tableB welcher Name ist @tableB * FROM @tableA?

declare @tableA TABLE(
column1, 
column2, 
.. 
) 

Der Ausgang Tabellenname auf die Eingabe des Benutzers hängt damit ich Variable eine andere

declare @tableB varchar = ... 

Am Ende erklärt haben, die vorübergehende Ergebnisse gespeichert werden müssen, in Tabelle, deren Name @tableB ist, habe ich versucht, in der gespeicherten Prozedur die folgende Anweisung zu schreiben:

declare @sql varchar(max) 
set @sql = 'SELECT * INTO ' + @tableB + ' FROM @tableA' 
exec(@sql) 

, die nicht korrekt ist. Weiß jemand, wie man Werte aus der Tabellenvariablen in die Tabelle einfügt, deren Name variabel ist?

+0

vermisse ich hier etwas? @tableB ist eine normale Tabelle, oder? Warum können Sie nicht eine einfache dynamische Einfügeabfrage verwenden? –

Antwort

1

Sie können hier keine Tabellenvariablen verwenden, versuchen Sie, temporäre Tabellen zu verwenden. create table #tableA (...

Für weitere Informationen: link text

Tabelle #A ( c1 int, int c2 ) schaffen;

Insert in #A Werte (1 , 2);

Insert in #A Werte (3,4);

declare @sql VARCHAR (max);

deklarieren @tableB sysname = '## tableB';

setzen @sql = 'SELECT * INTO' + @tableB + 'FROM #A';

Drucken @sql;

exec (@sql);

gehen

auswählen * von ## tableB;

0

Unter der Annahme, @tableB bereits vorhanden ist, wäre erste Vermutung zu versuchen:

SET @sql = 
    'INSERT 
    (
     col1, 
     col2 
    ) 
    INTO ' + @tableB + ' 
    SELECT 
    (
     col1, 
     col2 
    ) 
    FROM 
     @tableA' 

Dies ist nicht Syntax-Option aktiviert ist, so watch out!

Wenn @tableB nicht existiert, warum muss der Name vom Benutzer kommen?

Verwandte Themen