返回多个结果的存储过程:
CREATE PROCEDURE [dbo].[GetMultipleTable]
AS
BEGIN
if exists (select something from somewhere where somecondition = 1)
begin
select * from firsttable
end
select * from secondtable
END
当我们执行存储过程时,使用SqlDataAdapter
的{{3}}方法用DataSet
填充多个表格。
DataSet ds;
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);
我可以得到结果。但我认为我们可以做得更好:
var index = 0;
if( ds.Tables.Count > 1 ){
DataTable first = ds.Tables[index];
index++;
// do something
}
DataTable second = ds.Tables[index];
// do something
我很好奇我们是否可以按名称而不是索引获取表格。像..
DataTable first = ds.Tables["first"];
// do something
if(ds.Tables.Containts("second"))
{
DataTable second = ds.Tables["second"];
// do something
}
问题是:是否可以在存储过程中设置结果表的名称?
答案 0 :(得分:2)
我猜不是。在某种程度上,我怀疑这是处理这个问题的好方法。为什么不在这些情况下返回空结果集,而不是总是知道第n个结果集的含义。
除了将结果呈现为纯文本的情况之外,您不需要复杂的逻辑,处理结果的不同情况。
你为什么这样做?提高绩效的神秘愿望?
对于即席查询,它可能没问题,但对于存储过程。更好的三思而后行
也许我的态度受到这样一个事实的影响:我必须将这些程序转换为Oracle,并且您没有可变数量结果集的概念。对于每个结果集,您必须提前提供refcursor参数。