【问题标题】:set the result table name in stored procedure在存储过程中设置结果表名
【发布时间】:2011-06-03 22:05:39
【问题描述】:

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

CREATE PROCEDURE [dbo].[GetMultipleTable]
AS
BEGIN

   if exists (select something from somewhere where somecondition = 1)
   begin
       select * from firsttable
   end
   select * from secondtable
END

当我们执行存储过程时,使用SqlDataAdapterFill方法来填充一个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
}

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

【问题讨论】:

    标签: sql-server stored-procedures dataset


    【解决方案1】:

    我猜不是。在某种程度上,我怀疑它是处理这个的好方法。为什么不仅仅是返回这些情况下的空结果集,而不是始终知道第n个结果集合意味着什么。

    除了将结果渲染到纯文本的情况下,您不需要复杂的逻辑,请处理结果的不同情况。

    你为什么要这样做?神秘愿望提高性能?

    对于ad hoc查询,它可能是可以的,但是对于存储过程。最好三思而后行。

    也许我的态度受到事实的影响,我必须将这样的程序转换为Oracle和那里,你没有变量数量的概念。对于每个结果集,您必须提前提供Refcursor参数。

    【讨论】:

    • 如果不可能命名结果表,返回空的结果似乎是一个好主意。感谢咨询和共享。 span>
    • 是的,这是一个神秘的希望提高性能。我正在努力减少往返数据库的往返。 span>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多