使用SELECT *从表中选择特定字段

时间:2016-11-22 15:16:15

标签: sql sql-server select insert

我有两个表 - 我希望能够从tbl1中选择数据并将其插入到tbl2中。现在这是交易 - Tbl1大约有30个领域。该表中有三列不在tbl2中。我没有单独指定每个字段,而是试图看看是否有任何可能的方式来做我这样的事情......

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

或做类似

的事情
Insert Into tbl2 SELECT Field1, Field2 

但是因为在每种情况下我会为许多不同的表执行此操作,tbl1将有3个额外的字段,然后是相应的tb2 - 我正在尝试以简单和最干净的方式执行此操作

有什么建议吗?

3 个答案:

答案 0 :(得分:3)

这是无法做到的,没有语法可以插入或选择'除了'之外的所有字段。

如果使用它会是一个坏主意,原因与应用程序代码中的select *是一个坏主意完全相同。 (假设表定义永远不会改变,并且您总是需要所有数据。)

答案 1 :(得分:1)

你想这样做吗?

示例:

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

答案 2 :(得分: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是您想要错过的列