2014-08-27 2 views
0

Я запускаю скрипт в SQL Server Management Studio 2012, который включает в себя курсор. Скрипт будет проходить через таблицу базы данных по строкам и объединять данные в отдельные строки, вставленные во вторую таблицу базы данных. Я уверен, что курсор - лучший способ обойти это.Ошибка TSQL Cursor в FETCH NEXT - Исправлено во время выполнения второго раза

У меня проблема, которая, похоже, не связана с моим кодом, потому что когда это происходит, единственным решением является просто повторное выполнение кода, и ошибка не повторится.

Я подсказала ошибку следующим образом: будет происходить

FETCH NEXT FROM @theCursor INTO @variable, @anotherVariable, @etc... 

Следующая ошибка

Не удалось завершить операцию курсора, поскольку набор опций были изменены с момента курсор был объявлен.

Опять же, чрезвычайно запутанная проблема заключается в том, что это не произойдет, если я заново запустил скрипт после получения этой ошибки. Я создаю новый запрос в базе данных, и каждый раз получаю ошибку . Затем я перезапускаю сценарий, и он будет работать каждый раз, когда.

Еще одна странная вещь: ошибка возникает только после того, как эта линия FETCH была выполнена примерно пять раз!

Я попытался поймать ошибку и просто повторно вызвать всю процедуру, но ошибка продолжает происходить. Решение только Я знаю, что нужно снова запустить сценарий с помощью команды «Выполнение» SQL Server (F5 на клавиатуре).

Я знаю, что здесь не так много возможностей для продолжения. У меня не так много, чтобы идти в особенности.

+0

Пожалуйста, разместите соответствующий код, который определяет, открывает, считывает, закрывает и освобождает курсор. – wdosanjos

+1

Ошибка говорит вам о проблеме - параметры «SET» были изменены. И, конечно, если вы снова запускаете одно и то же соединение, проблема не появляется снова - опции 'SET' остаются в силе до тех пор, пока что-то не изменит их на другое значение. –

+0

Вы можете попробовать «DEALLOCATE CURSOR». –

ответ

0

Итак, оказывается, что я не знал, какие вещи можно рассматривать как «параметры SET» и какое влияние они могут иметь.

В моем сценарии я играю с dateformat, чтобы иметь дело с некоторыми несогласованными данными в таблицах базы данных. Это звучит примерно так:

set dateformat mdy 
/* Do some DATETIME stuff with current format... */ 
set dateformat ymd 
// ... 
set dateformat dmy 
// ... 
set dateformat ymd 
// ... 

Решение было не оставить DateFormat, как YMD, как я выше. Просто добавив set dateformat mdy в конце всего моего формата даты, shenanigans предотвращает возникновение ошибки. Как ни странно, заканчивается set dateformat dmy не работает, но set dateformat mdy делает.

Смежные вопросы