1

我希望这不是一个太尴尬的问题,但到目前为止我的搜索还没有对事情有太多的了解。如果之前有人问过,我很抱歉。

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

SELECT foo 
  FROM sometable 
 WHERE somecolumn = @parameter

然后,对于每个foo执行另一个查询,并将每个查询的结果作为单独的结果集返回。

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

这是在 SQL-Server 2008 R2 上。

谢谢你。

4

2 回答 2

2

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

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());
于 2014-03-14T16:03:25.623 回答
1

您可以将SELECT语句的结果放入游标中,然后遍历游标执行第二个查询foo

这篇文章很好地解释了游标

http://www.mssqltips.com/sqlservertip/1599/sql-server-cursor-example/

于 2014-03-14T15:54:43.363 回答