Sql server T-SQL返回多个结果集

Sql server T-SQL返回多个结果集,sql-server,tsql,sql-server-2008-r2,resultset,multiple-resultsets,Sql Server,Tsql,Sql Server 2008 R2,Resultset,Multiple Resultsets,我希望这不是一个太尴尬的问题,但到目前为止,我的搜索还没有揭示太多的问题。如果以前有人问过我,我很抱歉 我需要编写一个存储过程来运行一个简单的查询 SELECT foo FROM sometable WHERE somecolumn = @parameter 然后,对于每个foo执行另一个查询,并将每个查询的结果作为单独的结果集返回 我不需要返回初始查询的结果,只需要针对foo的每个值执行第二次查询的结果,而且我不希望将它们组合到一个结果集中,尽管它们都有相同的列(如果我可以返回多个

我希望这不是一个太尴尬的问题,但到目前为止,我的搜索还没有揭示太多的问题。如果以前有人问过我,我很抱歉

我需要编写一个存储过程来运行一个简单的查询

SELECT foo 
  FROM sometable 
 WHERE somecolumn = @parameter
然后,对于每个
foo
执行另一个查询,并将每个查询的结果作为单独的结果集返回

我不需要返回初始查询的结果,只需要针对
foo
的每个值执行第二次查询的结果,而且我不希望将它们组合到一个结果集中,尽管它们都有相同的列(如果我可以返回多个结果集,则会大大简化表示逻辑)

这是在SQLServer2008R2上


谢谢。

您可以将
SELECT
语句的结果放入游标中,然后在游标中循环,对
foo
执行第二次查询

本文很好地解释了游标


您应该在存储过程中使用游标,如下所示:

DECLARE @foo VARCHAR(XXX)

DECLARE Curs CURSOR FAST_FORWARD READ_ONLY FOR
SELECT 
    foo 
FROM sometable 
WHERE 
    somecolumn = @parameter

OPEN Curs

FETCH NEXT FROM Curs INTO @foo

WHILE @@FETCH_STATUS = 0
BEGIN

    -- here you should put actual query
    SELECT
    *
    FROM dbo.SomeTable
    WHERE
        foo = @foo

FETCH NEXT FROM Curs INTO @foo

END

CLOSE Curs
DEALLOCATE Curs
然后使用如下代码读取光标结果:

var sqlCommand = new SqlCommand("spYourStoredProcedure", connection)
sqlCommand.CommandType = CommandType.StoredProcedure;
var reader = sqlCommand.ExecuteReader();

do 
{
    while (reader.Read())
    {
        // DO SOMETHING
    }
} while(reader.NextResult());

您是否将结果返回给另一个sql方法或某些外部代码?正如Mike在下面所说的,您可以使用游标来循环。您可以将每个查询的结果存储在一个表变量中,然后在过程结束时从每个查询中进行选择。真正有趣的是,您如何知道实际要运行多少查询?我认为返回一个结果集要容易得多。某些工具无论如何都会忽略第一个结果集之后的任何内容。