У меня очень странное поведение с моим циклом курсора, вот что я получил;
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
Теперь, если я запустил это, я попаду во второй ряд на курсоре, и он будет аварийно завершать свою работу;
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)
Что-то в этом роде.