2011-07-06 68 views
0

在我的存储过程中,我执行另一个存储过程。下面是一个例子sql查询返回单个或多个记录?

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

然后

我要执行我的存储过程,并从查询通过上述

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

EXEC StoredProcedureName ID 

有什么想法吗?

回答

1

如果您使用的功能,而不是存储过程,并把它的权利在选择statment有可能

+0

或作为交叉应用... – gbn

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是做一个以上的输入。

+0

更正了最后一行,它说“vendor_cursor”,而不是“some_cursor”... –

+0

@Aaron谢谢复制粘贴让我 –

0

您可能需要使用循环(无论它是否明确使用DECLARE CURSOR基本上是不相关的),或者您需要提取StoredProcedureName中的逻辑,以便它可以在一个集合上工作而不是一次一个值。

+0

请你给我看第二部分的例子吗? –

+1

您需要向我们显示StoredProcedureName的代码。无法猜测它在做什么。也许开始一个新的问题,例如“我如何让这个代码在一组中工作......” –

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 
0

你可以改变你的存储过程吗?

也许你可以纳入

SELECT DISTINCT ID FROM TABLE WHERE NAME IS NOT NULL 

查询到存储过程,而不是传递参数。