2016-11-22 5 views
1

Ich habe zwei Tabellen - Ich möchte Daten aus tbl1 auswählen und in tbl2 einfügen. Nun, hier ist der Deal - Tbl1 hat etwa 30 Felder. In dieser Tabelle gibt es drei Spalten, die nicht in Tabl2 enthalten sind. Statt jedes Feld einzeln spezifizieren, ich habe versucht zu sehen, ob es von mir jede mögliche Art und Weise ist, so etwas zu tun ...Auswahl bestimmter Felder aus einer Tabelle mit SELECT *

Insert into Tbl2 SELECT * (but three fields) from tbl1 where value='value' 

oder etwas tun, wie

Insert Into tbl2 SELECT Field1, Field2 

sondern weil ich werde tun dies für viele verschiedene Tabellen in jedem Fall tbl1 wird 3 zusätzliche Felder haben dann die entsprechenden tb2 - ich versuche es so einfach und sauber wie möglich zu tun

Irgendwelche Vorschläge?

+0

Warum all diese Spalten und warum um Daten zu verschieben? – jarlh

+0

@jarlh müssen Benutzer eine Option geben, etwas, das sie zuvor getan haben, zu rückgängig machen - – BobSki

+3

Wenn Sie es richtig machen wollen, Spalten angeben! – jarlh

Antwort

3

Dies ist nicht möglich, es gibt keine Syntax zum Einfügen oder wählen Sie 'alle Felder außer'.

Und wenn es wäre, wäre es eine schlechte Idee, es zu verwenden, genau aus dem gleichen Grund, select * im Anwendungscode ist eine schlechte Idee. (Angenommen, die Tabellendefinition (en) ändern sich nie und Sie benötigen immer alle Daten.)

1

Versuchen Sie, dies zu tun?

Beispiel:

INSERT INTO Customers (CustomerName, Country) 
SELECT SupplierName, Country FROM Suppliers 
WHERE Country='Germany'; 
+0

Nun ja, aber ich weiß bereits, wie man es auf diese Weise versucht, einen Weg zu finden, nicht jedes Feld zu spezifizieren – BobSki

1
declare @sql as nvarchar(2000) 
declare @columns as nvarchar(1000) = '' 
select @columns = @columns + '[' + c.name + '], ' 
from syscolumns c join sysobjects o on c.id=o.id 
where o.name = 'tbl1' and c.name not in ('col1name', 'col2name', 
'col3name') 
set @columns = left(@columns,len(@columns)-2) 
set @sql = N'Insert Into tbl2 (' + @columns + ') values (' + @columns + ')' 
exec(@sql) 

wo col1name..col3name sind die Spalten, die Sie wollen verpassen

+0

danke - ich versuche nicht zu verrückt zu werden - ich gebe nur alle Felder an und lasse es für jetzt als ist. ! – BobSki

Verwandte Themen