Sql查询返回单个或多个记录?

时间:2011-07-06 15:04:20

标签: tsql sql-server-2008

在我的存储过程中,我执行另一个存储过程。这是一个例子

SELECT DISTINCT ID 
FROM TABLE 
WHERE NAME IS NOT NULL --CAN RETURN MULTIPLE RECORDS

然后

我需要执行我的存储过程并从上面的查询中传递参数ID

因此,如果上面的查询返回两个ID,我需要执行2次以下的存储过程。我认为的方法是创建一个循环,但不仅仅是确定它不是最有效的方式。

EXEC StoredProcedureName ID

任何想法?

5 个答案:

答案 0 :(得分:1)

如果您可以使用函数而不是存储过程并将其放在select statment中

答案 1 :(得分:0)

你需要创建一个游标并循环遍历它并调用你的程序。

例如

DECLARE @ID int
DECLARE some_cursor FAST_FORWARD FOR
SELECT DISTINCT ID FROM TABLE WHERE NAME IS NOT NULL

OPEN some_cursor 
FETCH NEXT FROM some_cursor 
INTO @ID 

WHILE @@FETCH_STATUS = 0
BEGIN

    EXEC StoredProcedureName @ID

    FETCH NEXT FROM some_cursor 
     INTO @ID 


END
CLOSE some_cursor ;
DEALLOCATE some_cursor;

正如您将注意到它的笨拙而且它的SQL无法优化StoredProcedureName正在为多个输入做的事情。

答案 2 :(得分:0)

您需要使用循环(无论是否明确使用DECLARE CURSOR在很大程度上都是无关紧要的),或者您需要在StoredProcedureName中提取逻辑,以便它可以一次处理集合而不是单个值。

答案 3 :(得分:0)

DECLARE @value INT
 DECLARE cur CURSOR FOR SELECT value FROM YourTable
 open cur
 FETCH NEXT FROM cur INTO @value
 WHILE @@FETCH_STATUS = 0
 BEGIN
      exec YourProcedure @value
      exec AnotherProcedure @value
      FETCH NEXT FROM cur INTO @value
 END
 CLOSE cur
 DEALLOCATE Cur

答案 4 :(得分:0)

您可以更改存储过程吗?

你可以加入

SELECT DISTINCT ID FROM TABLE WHERE NAME IS NOT NULL

查询存储过程而不是传入参数。