2016-11-22 60 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