将sp_executesql的结果动态插入表中

时间:2015-10-16 20:29:33

标签: sql sql-server tsql

我写过以下TSQL: -

declare @sql nvarchar(1000)
set @sql = N'select top 5 BusinessEntityID, PersonType from AdventureWorks2008R2.Person.Person'

create table #temp(BusinessEntityID int, PersonType varchar(10))
insert into #temp execute sp_executesql @statement=@sql
select * from #temp

这将创建一个临时表,其中包含@sql中标识的两列,然后将数据行插入其中,但我需要首先在create table语句中标识列。

有没有办法在没有事先知道列的情况下做到这一点?我希望能够将@sql设置为任何有效的select语句,但不必映射create table语句中的列。我已经尝试过使用select into,但我现在完全陷入困境。

任何指针都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

SELECT INTO将是唯一这样做的人。你不能按照你想要的方式使用动态sql。 select into部分必须是动态sql的一部分。

declare @sql nvarchar(1000)
set @sql = N'select top 5 BusinessEntityID, PersonType 
into MyNewTable 
from AdventureWorks2008R2.Person.Person'

exec sp_executesql @sql

我不得不问。为什么你需要在这里使用动态sql?没有理由从你发布的内容中使用它。这可以大大简化为以下内容。根本不需要动态sql。

select top 5 BusinessEntityID, PersonType 
    into MyNewTable 
    from AdventureWorks2008R2.Person.Person