执行一个存储过程,能否实现同时返回几个值和一个行集?或者同时返回几个值和几个行集.

来源:互联网 发布:深圳年度进出口数据 编辑:程序博客网 时间:2024/05/16 01:13

例如我要同时返回table1中的字段的2个值,同时返回table2的10行(每行是有多个字段的).
如何将这些结果在程序中分别获取出来?

msdn上的例子都看了,那个太简单,只是输出单一的值或者只是行.
所有问题全部解决了,用union   all可以用多种思路全部搞定,
存储过程定义时,注意几点,
CREATE   PROCEDURE   test  
@id1   smallint   output,
@id2   int   ,
@id3   int  
AS
set   nocount   on
BEGIN   TRANSACTION

SELECT   @id1   =   id  
FROM   BookIndex
WHERE   (bID   =   135   )
COMMIT   TRANSACTION

SELECT   id,   1       //这里注意,第一个行集是1列,但union   all的表必须是列数相同,因此用1凑够列数
FROM   BookIndex
WHERE   (bid   =   @id2   )   or   (bid   =   @id3   )     union       all

SELECT   ChapterTotal,   name//第2个行集是2列
FROM   BookIndex
WHERE   (bid   =   145   )     union       all

SELECT   @id1   ,   2//这里注意,不能直接将赋值给输出参数的语句作为union   all的对象,必须先获得@id的值再union   all
GO

这样所有结果全部放在一个行集的表里返回了.
具体在程序里获得返回的行集,怎么判断第1个行集结束,和第2个行集开始的呢?如果知道确切的每个
行集返回的行数是很简单的,但如果不知道每个行集返回的行数呢?我采用将第一个和第二个行集的列的类型
设置不同来搞定,获取结果时,当程序捕捉到转变类型异常,就知道是第2个行集开始了. 

返回多个"列完全不同的行集",在asp.net中可以使用
sqlReader = CmdObj.ExecuteReader();
while(sqlReader.Read())
{
 .......//获得弟一个结果集的内容
}
sqlReader.NextResult();
while(sqlReader.Read())
{
.......//获得弟二个结果集的内容
}
sqlReader.close();

CmdObj.Parameters["@wordCount"].Value;//获得参数返回的值
//最后关闭整个连接