我写过以下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
,但我现在完全陷入困境。
任何指针都会受到赞赏。
答案 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