返回多个结果的存储过程:
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
's Fill http://msdn.microsoft.com/en-us/library/zxkb3c3d.aspx方法来填充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
}
问题是:是否可以在存储过程中设置结果表的名称?
我猜不会。在某种程度上,我怀疑这是处理这个问题的好方法。在这些情况下,为什么不直接返回空结果集,因为您总是知道第 n 个结果集的含义。
除了将结果呈现为纯文本的情况之外,您是否不需要复杂的逻辑,请处理结果的不同情况。
你为什么这么做?提高绩效的神秘愿望?
对于即席查询来说可能没问题,但对于存储过程来说。最好三思而后行。
也许我的态度受到以下事实的影响:我必须将此类过程转换为 Oracle,而 Oracle 中没有结果集数量可变的概念。对于每个结果集,您必须提前提供一个 refcursor 参数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)