关于cursor的一些问题
创建一个临时的测试表
CREATE TABLE #CursorTest
(Name varchar(50)
,ID int IDENTITY(1,1))
INSERT #CursorTest
(Name)
VALUES
('A'),('B'),('C'),('D'),('E'),('F'),('G')
-------------------------------------------
SELECT * FROM #CursorTest
DECLARE @MyName varchar(50)
,@MyID int
DECLARE Mycursor CURSOR FOR
SELECT * FROM #CursorTest
OPEN Mycursor
FETCH NEXT FROM Mycursor into @MyName,@MyID
WHILE @@FETCH_STATUS=0
BEGIN
UPDATE #CursorTest SET Name=Name+'A'
WHERE ID=@MyID
/**************************************************************************
我的问题就在这里,正常结果输出是AA,BB,CC...,但是把这条语句去掉,结果显示为AAAAAAAA,
BAAAAAAA,...我不理解为什么语句执行到字母G的时候不中断,这不是已经到结果集的末尾了么,而且为什么它在本身的字母后面加到第七个A就不继续加下去了呢,是什么使它在这个时候停止的呢
*****************************************************************/
FETCH NEXT FROM Mycursor into @MyName,@MyID
END
------解决方案--------------------
CREATE TABLE #CursorTest
(Name varchar(50)
,ID int IDENTITY(1,1))
INSERT #CursorTest
(Name)
VALUES
('A'),('B'),('C'),('D'),('E'),('F'),('G')
-------------------------------------------
SELECT * FROM #CursorTest
DECLARE @MyName varchar(50)
,@MyID int
DECLARE Mycursor CURSOR FOR
SELECT * FROM #CursorTest
OPEN Mycursor
FETCH NEXT FROM Mycursor into @MyName,@MyID
WHILE @@FETCH_STATUS=0
BEGIN
UPDATE #CursorTest SET Name=Name+@MyName
WHERE ID=@MyID
/**************************************************************************
我的问题就在这里,正常结果输出是AA,BB,CC...,但是把这条语句去掉,结果显示为AAAAAAAA,
BAAAAAAA,...我不理解为什么语句执行到字母G的时候不中断,这不是已经到结果集的末尾了么,而且为什么它在本身的字母后面加到第七个A就不继续加下去了呢,是什么使它在这个时候停止的呢
*****************************************************************/
FETCH NEXT FROM Mycursor into @MyName,@MyID
END
close Mycursor
deallocate Mycursor
select *from #CursorTest
/*
你要的是这个结果吗?
------------------------
Name ID
AA 1
BB 2
CC 3
DD 4
EE 5
FF 6
GG 7
*/