我需要构建一个SSRS报告,该报告显示来自SQL Azure表的查询结果。然而,我的其中一个where条件将检查从存储过程(exec团队param1,param2)结果集中提取的数据。更为复杂的是,存储过程创建了一个临时表(tempteam
)来存储结果。如何为指定where子句中tempteam
内容的所需数据编写查询?
样本代码
exec team 9596, 2
select * from tempteam
Tempteam样本结果
consid
9596
23456
24354
20965
....
....
....
难道不能在查询的WHERE子句中使用"TEMP"表吗?
SELECT *
FROM SOME_TABLE
WHERE ID IN (SELECT consid FROM tempteam)
我不认为"TEMP"表实际上是一个普通的SQL临时表,因为它前面没有标签(#tempteam
)——它看起来就像是存储在数据库中的一个实际表。
这里有一个可以使用的选项:
EXEC('EXEC team 9596, 2; select * from tempteam')
或参数化:
EXEC('EXEC team ' + @p1 + ',' + @p2 + '; select * from tempteam')
完整复制:
create table test(f1 varchar(256) null)
go
create proc sp_test(@p varchar(256) = 'Hello ')
as
insert test
select @p
return 1
go
declare @p varchar(256) = 'World'
EXEC('EXEC sp_test @p = ''Hello ''; select * from test')
EXEC('EXEC sp_test @p = ' + @p + '; select * from test')
drop proc sp_test
go
drop table test
go