Tsql 带有动态列的Insert语句

Tsql 带有动态列的Insert语句,tsql,Tsql,我有一个表,它由100列组成,基于一个特定的条件,我只想在insert语句中生成一些列。 如: 该表有100列,但基于我仅在特定列中插入的条件: insert into temp (id,name,age,gender,contact) select * from #temp--temp table 您可能希望将查询构造为字符串(varchar),然后使用- Exec sp_executesql 例如— Declare @sql varchar(max) SET @sql = 'inser

我有一个表,它由100列组成,基于一个特定的条件,我只想在insert语句中生成一些列。 如: 该表有100列,但基于我仅在特定列中插入的条件:

insert into temp (id,name,age,gender,contact) 
select * from #temp--temp table

您可能希望将查询构造为字符串(varchar),然后使用-

Exec sp_executesql
例如—

Declare @sql varchar(max)
SET @sql = 'insert into temp '

现在,您可以将列的名称添加到@sql变量中,具体取决于您的逻辑。

下面是一个完全有效的示例:

create table temp (id int,name varchar(20),code int, morecolumns int) 
create table #temp(id int,name varchar(20),code int)

insert #temp values(1,'Thomas Clausen',1)

select * into xx_temp from #temp

declare @col varchar(max) , @sql varchar(max) = ''

select @col = coalesce(@col + ',', '')+ '[' + name + ']'
from tempdb.sys.columns 
where object_id = object_id('tempdb..#temp');

select @sql='insert temp(' + @col+ ') select '+@col+' from xx_temp'  

exec (@sql)
go
drop table xx_temp
有一个缺点,此示例将创建一个表xx_temp,并在执行后立即将其删除。因此,脚本一次执行不应超过一次。
如果不想指定可以选择的列,则创建表xx_表是为了将数据放入动态sql中的相同范围中

SELECT * 
INTO newTable
FROM #source
这将执行您想要的操作,但是
newTable
表必须不存在(此查询将创建表)。
如果要插入到现有的中,必须指定列,很抱歉,生成的字符串查询的EXEC是唯一的方法。

您的问题是什么?我们可以在insert语句中动态生成列吗?您可以生成和执行动态sql语句,并从for中收集列example@sqlvarchar(最大值)='id'是指在TSQL中声明变量时不能赋值。您可以这样做-@sqlvarchar(max);set@Sql='id'@Umesh实际上您可以从sqlserver 2008+实际上我将一个数据表从c#传递到我的存储过程,该过程可能只包含5列,而目标表有100列。如何将数据集转换为目标表。这样我只能插入5列值。非常感谢您的回复