我确信这很容易,但我有一个select语句存储为变量,例如@statement包含一个语句“select table(*)from table1”我需要执行这个变量,例如sp_executesql @statement但是将结果放到临时表中,这可能很容易吗?
谢谢
答案 0 :(得分:2)
您可以先创建临时表,然后使用insert into ... exec...
:
declare @statement nvarchar(max);
set @statement = 'select 1';
create table #temp (rc int);
insert into #temp (rc)
exec sp_executesql @statement;
select * from #temp;
rextester演示:http://rextester.com/WPDAZ22362
返回:1
答案 1 :(得分:0)
一种方式:
declare @statement nvarchar(max) = 'select count(*) from table1'
declare @sql nvarchar(max) = N'set @result = (' + @statement + ')'
declare @result int
exec sp_executesql @sql, N'@result int OUTPUT', @result=@result OUTPUT;
select @result;
select @result as count into #temp
答案 2 :(得分:0)
很抱歉,我没有得到所有的问题,在我发布的select语句中,它只返回了1个字段,但我现在被告知计数,即1个字段只是一个例子,我可能需要返回多个字段所以SqlZim响应不起作用我不认为因为我不会总是知道列的数量/名称。我选择做的是: -
Declare @TempSQLStatement nvarchar(max)
SET @TempSQLStatement=REPLACE(@statement,' FROM ',' INTO ##temp FROM ');
EXEC sp_executesql @TempSQLStatement;
SELECT * from ##temp
不确定如何给出答案,因为Alex的解决方案可以正常工作,我相信如果我首先发布了完整的信息,SqlZim会发布类似的东西,可以管理员协助吗?