在存储过程中设置结果表名称

时间:2011-01-05 10:05:56

标签: sql-server stored-procedures dataset

返回多个结果的存储过程:

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
}

问题是:是否可以在存储过程中设置结果表的名称?

1 个答案:

答案 0 :(得分:2)

我猜不是。在某种程度上,我怀疑这是处理这个问题的好方法。为什么不在这些情况下返回空结果集,而不是总是知道第n个结果集的含义。

除了将结果呈现为纯文本的情况之外,您不需要复杂的逻辑,处理结果的不同情况。

你为什么这样做?提高绩效的神秘愿望?

对于即席查询,它可能没问题,但对于存储过程。更好的三思而后行

也许我的态度受到这样一个事实的影响:我必须将这些程序转换为Oracle,并且您没有可变数量结果集的概念。对于每个结果集,您必须提前提供refcursor参数。