1
關鍵字SQL WITH關鍵字使用內部CURSOR當觀察一些奇怪的行爲:WITH內部CURSOR
WITH minuteList (aMinute) AS
(
SELECT @startTime UNION ALL
SELECT DATEADD(MINUTE, 1, aMinute)
FROM minuteList
WHERE aMinute < DATEADD(MINUTE, 9, @startTime)
)
SELECT * FROM minuteList
上面的代碼工作完全創建表,帶1分鐘間隔一個一分鐘的列和10行的日期時間。但是,下面的代碼進入一個無限循環,無限循環地打印@startTime值。
DECLARE cursor1 CURSOR FOR
WITH minuteList (aMinute) AS
(
SELECT @startTime UNION ALL
SELECT DATEADD(MINUTE, 1, aMinute)
FROM minuteList
WHERE aMinute < DATEADD(MINUTE, 9, @startTime)
)
SELECT * FROM minuteList
OPEN cursor1
FETCH NEXT FROM cursor1 INTO @laterTime
WHILE @@FETCH_STATUS = 0 BEGIN
PRINT @laterTime
END
CLOSE cursor1;
DEALLOCATE cursor1;
有人可以解釋發生了什麼,爲什麼發生無限循環?
到底爲什麼你要堅持到**光標這種**?避免像瘟疫一樣的遊標! – 2014-09-24 05:11:15
@Matthew Haugen不,配對,這給附近DECLARE cursor1 – Alxg 2014-09-24 05:18:11
'WHILE @@ FETCH_STATUS = 0'附近的語法不正確。 FETCH_STATUS從不被操縱,所以它什麼時候從0改變到終止循環? – CodeNewbie 2014-09-24 05:21:55