我需要在SQL Server 2008上运行存储过程。
但是,我只能从光标中获取一行。之后,@@ FETCH_STATUS为-1。
DECLARE @my_table TABLE
(
id int not null
);
INSERT INTO @my_table (id)
SELECT DISTINCT a.id
FROM table1 as a
WHERE a.value = 'abc'
ORDER BY a.id ASC
DECLARE t_input CURSOR FOR
SELECT id
FROM @my_table
DECLARE @return_value tinyint
DECLARE @my_id int
OPEN t_input
FETCH NEXT FROM t_input into @my_id # only the first row is fetched successfully
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC @return_value = my_procudure
@arg1 = @my_id,
@ar2 = 9
SELECT 'Return Value' = @return_value
FETCH NEXT FROM t_input into @my_id # this is -1 !!!!!!!!!!
END
因此,它只在while循环中运行一次迭代。
my_procudure运行良好,与光标无关。
在调试模式下,我看到循环只运行一次。
任何帮助将不胜感激。
答案 0 :(得分:0)
我认为你多次使用相同的值调用存储过程,并假设它无效地退出游标。把“选择'我跑';”在my_procedure中查看它实际运行的次数。
答案 1 :(得分:0)
根据代码,看起来光标将运行多次等于
SELECT COUNT(DISTINCT a.id)
FROM table1 as a
WHERE a.value = 'abc'
如果这是1,那么它是预期的行为。您需要查看table1中的a.value,以及您希望它如何影响此过程。