例如我要同时返回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;//获得参数返回的值
//最后关闭整个连接