我有两个表 - 我希望能够从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 - 我正在尝试以简单和最干净的方式执行此操作
有什么建议吗?
答案 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是您想要错过的列