我有一个这样的存储过程:
if(@sub_sheetpart= 'c')
begin
select a,b,c from table1
end
if(@sub_sheetpart= 'd')
begin
select a,b,c,d,e,f from table2
end
一次只能从存储过程返回一个结果集。
问题出在SSRS数据集中 - 它每次只显示第一个结果集的列,即列a,b,c
,即使我打算调用存储过程的后半部分(@sub_sheetpart= 'd'
)。
答案 0 :(得分:2)
SSRS只会在生成DataSet中的字段列表时考虑一组结果。
你可以解决这个问题,以确保运行的是你得到的相同字段:
if(@sub_sheetpart= 'c')
begin
select a
, b
, c
, d = null
, e = null
, f = null
from table1
end
if(@sub_sheetpart= 'd')
begin
select a
, b
, c
, d
, e
, f
from table2
end
根据上述内容重新创建DataSet - 它现在将具有六个预期字段。
另一种选择是翻转if
/ else
的顺序,以便第二个查询位于第一个if
部分。
您甚至可以手动将字段添加到DataSet设计器的DataSet中。
答案 1 :(得分:0)
还有一项工作,虽然它不合适,但你可以得到理想的结果。
您可以创建一个临时表,然后在每个if
语句后插入null。
例如:
create table #temp
(
id int
)
if(@sub_sheetpart= 'c')
begin
insert #temp(
id
)
select null
select a
, b
, c
from table1
end
if(@sub_sheetpart= 'd')
begin
insert #temp(
id
)
select null
select
e
, f
from table2
end