SQL游标进入无限循环
这个sql进入无限循环 我找不出它有什么毛病。我搜索了其他帖子,但大部分都没有找到end标记之前的最后一个fetch语句。我肯定我看错了什么,但我不知道是什么。我错过什么了吗 下面是我的代码SQL游标进入无限循环,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,这个sql进入无限循环 我找不出它有什么毛病。我搜索了其他帖子,但大部分都没有找到end标记之前的最后一个fetch语句。我肯定我看错了什么,但我不知道是什么。我错过什么了吗 下面是我的代码 DECLARE @counter INT = 1042, @overwrite_text NVARCHAR(250), @sequence INT, @is_correct BIT, @score INT, --@form_question_id
DECLARE
@counter INT = 1042,
@overwrite_text NVARCHAR(250),
@sequence INT,
@is_correct BIT,
@score INT,
--@form_question_id INT,
@question_answer_id INT;
DECLARE cursor_form_answer CURSOR
FOR SELECT
[overwrite_text]
,[sequence]
,[is_correct]
,[score]
--,[form_question_id]
,[question_answer_id]
FROM [form_question_answer];
OPEN cursor_form_answer;
FETCH NEXT FROM cursor_form_answer INTO
@overwrite_text,
@sequence,
@is_correct,
@score,
--@form_question_id,
@question_answer_id;
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO [form_question_answer] (overwrite_text, sequence, is_correct, score, form_question_id, question_answer_id)
VALUES (@overwrite_text, @sequence, @is_correct, @score, @counter, @question_answer_id);
SET @counter = @counter + 1;
FETCH NEXT FROM cursor_form_answer INTO
@overwrite_text,
@sequence,
@is_correct,
@score,
--@form_question_id,
@question_answer_id;
END;
CLOSE cursor_form_answer;
DEALLOCATE cursor_form_answer;
这里根本不需要光标。只需使用选择按钮插入数据:
然而,我必须说,从表表单中捕获数据,然后将其插入到所述表中,这似乎真的很奇怪。默认情况下,光标是动态的,它在每次迭代时读取表。在代码中,每次迭代时都会插入新行,并且光标永远不会到达表的末尾 如果要对现有数据进行一次传递,只需将光标声明为静态:
DECLARE cursor_form_answer CURSOR STATIC
或者,如果您的数据支持,您可以将动态光标的范围仅限于现有行,例如,有一个标识列,这里有一条关于光标评估的细微差别/细线
--this.. if sequence is autoincrement
DECLARE cursor_form_answer CURSOR
FOR SELECT
...
from [form_question_answer]
where [sequence] <= (select max([sequence]) from [form_question_answer])
是的,这是因为您在用于循环的同一个表中插入了记录。 例如,如果表中有一条记录,那么插入的记录将是下一次提取,也是一个无限循环。为什么在这里使用光标?插入到…选择中有什么问题?
--this.. if sequence is autoincrement
DECLARE cursor_form_answer CURSOR
FOR SELECT
...
from [form_question_answer]
where [sequence] <= (select max([sequence]) from [form_question_answer])