在我的存储过程中,我执行另一个存储过程。这是一个例子
SELECT DISTINCT ID
FROM TABLE
WHERE NAME IS NOT NULL --CAN RETURN MULTIPLE RECORDS
然后
我需要执行我的存储过程并从上面的查询中传递参数ID
因此,如果上面的查询返回两个ID,我需要执行2次以下的存储过程。我认为的方法是创建一个循环,但不仅仅是确定它不是最有效的方式。
EXEC StoredProcedureName ID
任何想法?
答案 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
查询存储过程而不是传入参数。