2016-11-22 59 views
1

我有兩個表 - 我希望能夠從tbl1中選擇數據並將其插入到tbl2中。現在這個交易 - Tbl1大約有30個領域。該表中有三列不在tbl2中。相反,單獨指定每個字段的,我是想看看有沒有從我的任何可能的方式做這樣的事情...使用SELECT從表中選擇特定字段*

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

或做類似

Insert Into tbl2 SELECT Field1, Field2 

而是因爲我會做這個在許多不同的表在每種情況下tbl1將有3個額外的領域,然後相應的tb2 - 我試圖做到簡單和最乾淨的方式

任何建議嗎?

+0

爲什麼所有這些列的列,爲什麼圍繞數據移動? – jarlh

+0

@jarlh需要爲用戶提供UNDO選項,它們以前完成的操作 - – BobSki

+3

如果要正確執行此操作,請指定列! – jarlh

回答

3

這不能完成,沒有語法來插入或選擇'除了所有字段'。

如果出現這種情況,使用它會是一個糟糕的主意,因爲應用程序代碼中的select *是一個壞主意。 (假設表格定義永遠不會改變,並且您始終需要所有數據。)

1

您是否正在嘗試這樣做?

例子:

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

嗯是的,但我已經知道如何做到這一點試圖找到一種方法來不指定每個字段 – 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) 

其中col1name..col3name你不想錯過

+0

謝謝 - 我不想太瘋狂 - 我只是指定所有的領域,現在離開它作爲是。 ! – BobSki