我有一个存储过程,我得到了我想要的特定客户。它有20行......
我需要做的是为20个客户调用一个或多个存储过程,然后返回整个结果集。我有以下但它只是挂起并说执行..我想知道我有什么不对......
ALTER PROCEDURE [dbo].[getAllTotals] -- This stored procedure is new
@pDt1 datetime, @pDt2 datetime, @pStore int
AS
BEGIN
DECLARE @AccountTbl table (AccountID int );
DECLARE @TotalTbl table (AccountID int, col1 varchar(100), col2 varchar(100) );
DECLARE @accountID int
--cache all accountid INTO cursor AccountID_cursor
DECLARE AccountID_cursor CURSOR FOR
SELECT Storeid
FROM tblStore
WHERE StoreID = 111 OR storeid = 933
OPEN AccountID_cursor;
FETCH NEXT FROM AccountID_cursor INTO @accountID;
WHILE @@FETCH_STATUS = 0
BEGIN
--insert total amount info to tmp table @TotalTbl
insert @TotalTbl
EXEC [dbo].[rptTransactions06192012_royal]
@pDt1 = @pDt1, @pDt2 = @pDt2, @pStore = @accountID
END
--Send temp table results to front end as.
SELECT * FROM @TotalTbl
END
这有意义吗?
提前感谢!!
安娜
答案 0 :(得分:2)
你永远不会指示光标抓住下一行。
FETCH NEXT FROM AccountID_cursor INTO @accountID;
WHILE @@FETCH_STATUS = 0
BEGIN
--insert total amount info to tmp table @TotalTbl
insert @TotalTbl
EXEC [dbo].[rptTransactions06192012_royal]
@pDt1 = @pDt1,
@pDt2 =@pDt2,
@pStore = @accountID
FETCH NEXT FROM AccountID_cursor INTO @accountID;
END
另外,请记住,cursoirs的速度非常慢。
答案 1 :(得分:1)
在任何循环周期中,您需要在每个循环结束时移动到下一个项目,否则它将是无限循环。
对于移动到下一个项目的游标指令是“FETCH NEXT”,您只需要将初始加载行复制到游标循环的末尾,这样一旦完成就抓住下一行。