【发布时间】:2018-11-21 14:06:13
【问题描述】:
我的光标循环有非常奇怪的行为,这就是我得到的;
DECLARE @StartDate AS DATE
DECLARE @ID INT
DECLARE CursorTest CURSOR FOR
SELECT ID FROM tblSomething
OPEN Schedule
FETCH NEXT FROM CursorTest INTO @ID
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @StartDate = StartDate FROM tblAnother WHERE ID = @ID
SELECT @StartDate --12/06/2018
-- NOW WE MOD IT
SET DATEFIRST 6 -- WE START ON SATURDAY 1
SET @StartDate = DATEPART(dw,@StartDate)
SELECT @StartDate -- ANSWER IS 4
FETCH NEXT FROM CursorTest INTO @ID
END
CLOSE CursorTest
DEALLOCATE CursorTest
现在,如果我运行它,我会到达 CURSOR 的第二行,它会崩溃并显示状态;
Could not complete cursor operation because the set options have changed since the cursor was declared.
现在如果我注释掉;
--SET DATEFIRST 6
错误消失了,所以我认为 SET DATEFIRST 正在修改导致错误的数据库。
有没有使用类似的东西;
SET @StartDate = DATEPART(dw,@StartDate,DATEFIRST 6)
类似的东西。
【问题讨论】:
-
OPEN 计划更改为 OPEN CursorTest
-
我知道这只是一个错字,仍然会崩溃......
-
你为什么要用
cursor做这个?看起来您可以通过简单的基于集合的查询和case表达式来实现这一点? -
我正在使用游标,因为我要从一个表中提取 15000 行,并且每行需要将 50 行插入到另一个表中。这是一个很大的脚本。
-
750,000 行并不多。也许问另一个问题以寻求有关如何实现
insert的帮助,并将此问题留给需要在cursor中更改datefirst属性的任何人。
标签: sql-server date while-loop cursor