|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
Здравствуйте, коллеги. Есть вот такой код: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47.
Код упрощен для отладки, так что на "физический смысл" не обращайте внимания. Проблема вот в чем. Запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
возвращает более 6000 записей, а запрос по результирующей таблице Код: sql 1. 2.
возвращает примерно 160-170 записей (при каждом выполнении разное число!!!) Причем это именно первые 160-170 записей из верхнего запроса. Получается, что цикл по курсору не обходит все строки, а вылетает где-то раньше времени по непонятной причине. Как такое вообще возможно и куда теперь копать? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 16:07 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
адо. Получается, что цикл по курсору не обходит все строки, а вылетает где-то раньше времени по непонятной причине А как число записей в таблице #mytemptable показывает число итераций цикла WHILE ? И как вы обрабытываете ошибки выполнения вашего кода ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 16:16 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
GloryА как число записей в таблице #mytemptable показывает число итераций цикла WHILE ? А какие еще могут быть причины непопадания записей в эту таблицу? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 16:29 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
адоGloryА как число записей в таблице #mytemptable показывает число итераций цикла WHILE ? А какие еще могут быть причины непопадания записей в эту таблицу?Ошибки в коде до упрощения. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 16:30 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
адо, а если попробовать объявить курсор статическим? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 16:33 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
Гавриленко Сергей Алексеевичадопропущено... А какие еще могут быть причины непопадания записей в эту таблицу?Ошибки в коде до упрощения. А какое они имеют значение? Проблема то фиксируется в уже упрощенном коде, в том, который приведен выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 16:33 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
iapадо, а если попробовать объявить курсор статическим? Попробовал. Нет, не помогает. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 16:38 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
адоПроблема то фиксируется в уже упрощенном коде, в том, который приведен выше. И где же она фиксируется то ? Вы трассировали число итераций в Профайлере, например ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 16:39 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
адоiapадо, а если попробовать объявить курсор статическим? Попробовал. Нет, не помогает.Что сделали? Текст покажите ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 16:41 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
GloryадоПроблема то фиксируется в уже упрощенном коде, в том, который приведен выше. И где же она фиксируется то ? Вы трассировали число итераций в Профайлере, например ? Нет. Ситуация осложняется тем, что доступа к инструментальным средствам MS-SQL нет, есть доступ только к клиентскому приложению. Так что я могу только исполнять запросы и выводить результаты. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 16:46 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
iapадопропущено... Попробовал. Нет, не помогает.Что сделали? Текст покажите Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 16:47 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
адоСитуация осложняется тем, что доступа к инструментальным средствам MS-SQL нет, есть доступ только к клиентскому приложению. Откуда вы тогда знаете, что происходит на сервере при выполнении вашего кода ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 16:47 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
адоiapпропущено... Что сделали? Текст покажите Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47.
И где тут ключевое слово STATIC? Синтаксис Вам доступен? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 16:49 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
GloryадоСитуация осложняется тем, что доступа к инструментальным средствам MS-SQL нет, есть доступ только к клиентскому приложению. Откуда вы тогда знаете, что происходит на сервере при выполнении вашего кода ? Делаю косвенные выводы по получаемым результатам. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 16:56 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
адоGloryпропущено... Откуда вы тогда знаете, что происходит на сервере при выполнении вашего кода ? Делаю косвенные выводы по получаемым результатам.Без трассы профайлера разговор ни о чем. Никто даже не знает, какой именно код выполняется на сервере, но результаты этого неизвестного кода почему-то считаются неправильными. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 16:58 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
iapИ где тут ключевое слово STATIC? Синтаксис Вам доступен? Пардон, не оттуда скопировал. Ну, в общем, добавил STATIC в декларацию курсора. На результат не повлияло. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 16:58 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
адоGloryпропущено... Откуда вы тогда знаете, что происходит на сервере при выполнении вашего кода ? Делаю косвенные выводы по получаемым результатам. Ааа. Типа дедуктивный метод Шерлока Холмса ? И вы получили вывод, что курсор именно пропускает строки ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 17:00 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
Гавриленко Сергей Алексеевичадопропущено... Делаю косвенные выводы по получаемым результатам.Без трассы профайлера разговор ни о чем. Никто даже не знает, какой именно код выполняется на сервере, но результаты этого неизвестного кода почему-то считаются неправильными. Предполагаете, что где-то в недрах ODBC-драйвера код может волшебным образом поменяться? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 17:01 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
адоПредполагаете, что где-то в недрах ODBC-драйвера код может волшебным образом поменяться? Ваша тезка ADO такая затейница. Так и непонятно, как же вы обрабатываете ошибки ? И тетстировали ли вы ваш скрипт просто в SMS ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 17:04 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
Gloryадопропущено... Делаю косвенные выводы по получаемым результатам. Ааа. Типа дедуктивный метод Шерлока Холмса ? И вы получили вывод, что курсор именно пропускает строки ? Не пропускает, скорее вылетает из цикла раньше, чем должен. Вот пытаюсь выяснить, почему, и как это вообще понять отлаживая через замочную скважину. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 17:07 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
GloryТак и непонятно, как же вы обрабатываете ошибки ? Ну как обрабатываю, обыкновенно. Коннектор возвращает ошибку -- я о ней сообщаю. В данном случае -- не возвращает. GloryИ тетстировали ли вы ваш скрипт просто в SMS ? Говорю же, нет такой возможности. На реально базе, по крайней мере. А на нереальной ошибка не воспроизводится. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 17:13 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
адоНу как обрабатываю, обыкновенно. Коннектор возвращает ошибку -- я о ней сообщаю. В данном случае -- не возвращает. Круто адоГоворю же, нет такой возможности. На реально базе, по крайней мере. Это как ? Чем ваши приложение отличается от SMS или sqlcmd или Access или Excel ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 17:19 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
GloryЧем ваши приложение отличается от SMS или sqlcmd или Access или Excel ? Тем, что к этому приложению у меня есть доступ на сервере заказчика, а к другим нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 17:23 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
адоТем, что к этому приложению у меня есть доступ на сервере заказчика, а к другим нет. Обратитесь к администратору, за получением доступа. Обратитесь к администратору, за получением бэкапа базы. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 17:25 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
GloryадоТем, что к этому приложению у меня есть доступ на сервере заказчика, а к другим нет. Обратитесь к администратору, за получением доступа. Обратитесь к администратору, за получением бэкапа базы. Ни то, ни другое невозможно из-за параноидальной политики безопасности. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 17:26 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
адоНи то, ни другое невозможно из-за параноидальной политики безопасности. Ага, давайте подметать лужи ломами. Ибо мне не нужно, чтобы луж не было. Мне нужно, чтобы вы зае-лись. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 17:29 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
После открытия курсора, посмотрите что вернет @@cursor_rows ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 17:38 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
STATIC не совместим с FAST_FORWARD Слабо верится в "добавил STATIC" ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 17:52 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
invmПосле открытия курсора, посмотрите что вернет @@cursor_rows @@cursor_rows возвращает то, что и ожидается, то есть число, совпадающее с количеством записей, которое возвращает запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 18:07 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
Зайцев ФёдорSTATIC не совместим с FAST_FORWARD Слабо верится в "добавил STATIC" Хммм, справка говорит, что FAST_FORWARD не совместим только с SCROLL и FOR_UPDATE ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 18:08 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
адоЗайцев ФёдорSTATIC не совместим с FAST_FORWARD Слабо верится в "добавил STATIC" Хммм, справка говорит, что FAST_FORWARD не совместим только с SCROLL и FOR_UPDATE А справка, случайно, не говорит, что FAST_FORWARD - фишка динамических курсоров? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 18:10 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
Зайцев Фёдорадопропущено... Хммм, справка говорит, что FAST_FORWARD не совместим только с SCROLL и FOR_UPDATE А справка, случайно, не говорит, что FAST_FORWARD - фишка динамических курсоров? Нет, не говорит. А можно пруф? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 18:16 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
адоЗайцев Фёдорпропущено... А справка, случайно, не говорит, что FAST_FORWARD - фишка динамических курсоров? Нет, не говорит. А можно пруф? Этого уже нет в справке) Раньше было в BOL. А что, у вас без ошибок выполняется следующий код? Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 18:29 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
Зайцев Фёдорадопропущено... Нет, не говорит. А можно пруф? Этого уже нет в справке) Раньше было в BOL. А что, у вас без ошибок выполняется следующий код? Код: sql 1.
в описании синтаксиса явно указано [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ], что значит "только одна из опций" ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 18:41 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
Упростил до предела. Загнал результат запроса в промежуточную таблицу, и на ней уже построил курсор. Получилось так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
При этом Код: sql 1.
возвращает 6195 записей, а Код: sql 1.
-- 169. Шайтанама! Ну где оно может ломаться? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 18:46 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
Ну даже фиг знает Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 18:52 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
Shakillв описании синтаксиса явно указано [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ], что значит "только одна из опций" Я как бы вопрос задал про безошибочное выполнение. Ваш ответ - это "да" или "нет"? И да, "в описании синтаксиса явно указано" STATIC | DYNAMIC, что значит "только одна из опций". Самому не смешно? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 18:55 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
Зайцев Фёдорадопропущено... Нет, не говорит. А можно пруф? Этого уже нет в справке) Раньше было в BOL. А что, у вас без ошибок выполняется следующий код? Код: sql 1.
Каюсь, не заметил. fast_forward у меня уже удален был, когда я static добавил. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 19:02 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
Зайцев ФёдорНу даже фиг знает Код: sql 1.
А что такого? VARCHAR, вроде, до 8000 знаков допускает. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 19:05 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
адоЗайцев ФёдорНу даже фиг знает Код: sql 1.
А что такого? VARCHAR, вроде, до 8000 знаков допускает. Да это я уже теней шугаюсь )) Ошибки при выполнении возникают? Если нет, то ничего умнее set rowcount 0; в голову не приходит ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 19:09 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
В том то и беда, что никаких ошибок. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 19:26 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
адоПри этом Код: sql 1.
возвращает 6195 записей, а Код: sql 1.
-- 169. Шайтанама! Ну где оно может ломаться?Что вернет Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 19:44 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
адо, Чудес не бывает. В начало скрипта - set nocount on. Иначе иногда в клиенте можно не отловить ошибку. Либо оберните цикл в try/catch и ловите ошибку на сервере. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 19:52 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
адо, Код: sql 1. 2. 3. 4. 5.
Ниже вы в курсоре используете неявное преобразования поля id. На нем не может валиться? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 21:32 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
Edkonst2008адо, Код: sql 1. 2. 3. 4. 5.
Ниже вы в курсоре используете неявное преобразования поля id. На нем не может валиться? Теоретически не должно, но попробую сделать явным. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2014, 21:57 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
адо, После цикла чему равен @@FETCH_STATUS? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2014, 09:51 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
Зайцев ФёдорShakillв описании синтаксиса явно указано [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ], что значит "только одна из опций" Я как бы вопрос задал про безошибочное выполнение. Ваш ответ - это "да" или "нет"? И да, "в описании синтаксиса явно указано" STATIC | DYNAMIC, что значит "только одна из опций". Самому не смешно? не поняли друг друга это был комментарий не про выполнение, а про то что в справке нет слов, подтверждающих ваши. я сослался на описание синтаксиса, которое означает, что из четырех этих ключей можно использовать только один ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2014, 10:19 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
а вас не смущает? Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2014, 10:26 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
VARCHAR(70)а вас не смущает? Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Я же в 1000 пишу 70, а не наоборот. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2014, 10:31 |
|
Цикл по курсору обходит не все строки
|
|||
---|---|---|---|
#18+
адоVARCHAR(70)а вас не смущает? Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Я же в 1000 пишу 70, а не наоборот. 1. Предварительно значения поля descr из таблицы #mytemptable1 (а размере которого вы ничего не сообщили) сохраняется в переменную @descr. 2. VARCHAR(1000) вы взяли "от балды" или ориентируюсь на реальный размер поля в исходных таблицах? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2014, 10:41 |
|
|
start [/forum/topic.php?all=1&fid=46&tid=1702026]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
164ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
74ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 301ms |
0 / 0 |