Замена курсоров в скрипте SQL? - PullRequest
0 голосов
/ 24 октября 2019

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

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

Итак, как мне циклически проходить через записи, выполнять шаги вычислений и создавать выходные данные для каждой записи без использования курсора?

Извините, из-за рабочего продукта и размера скрипта, я не могу опубликовать его код. Формат этого файла:

  • Курсор перебирает таблицу, в которой содержатся родительские записи
  • Для каждой родительской записи он принимает значения полей и выполняет преобразования из строк во время.
  • Эти преобразования затем используются между операторами, чтобы выяснить, находится ли время между двумя значениями времени поля
  • Оператор вставки с выводом помещается во временную таблицу и суммируется в конце.
  • Другой курсор создается в родительском курсоре, чтобы извлечь дочерние записи родительской записи из другой таблицы. Происходит тот же процесс, что и у родителя.

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

1 Ответ

0 голосов
/ 25 октября 2019

Прежде всего, я надеюсь, что вы знаете, что SQL Server 2008 не поддерживается даже с пакетом обновления 4 в течение нескольких месяцев.

Во-вторых, как уже говорили другие, ваш старший администратор БД прав насчет курсоров. И если ваш код слишком велик, чтобы публиковать его здесь, он, вероятно, отнимает слишком много времени, чтобы пройти его, понять ваш код и затем изменить его для вас. Однако я ожидаю, что старший даст некоторые подсказки о том, что искать.

По поводу вашего вопроса, мне очень трудно придумать ответ, потому что ваше описание только дает мне смутное представление о том, что вы ищете. пытаясь достичь. Например, каковы «значения полей», которые вы конвертируете во время?

По моему опыту, SQL Server довольно хорошо интерпретирует строки даты и времени. Также вам могут пригодиться приведение / преобразование и datepart.

Насколько я понял вашу таблицу родителей / детей, вы, вероятно, захотите использовать здесь соединение таблиц. Они хорошо объяснены здесь: https://www.w3schools.com/sql/sql_join.asp

Вы можете объединить результирующий набор в sum (). Но опять же, мое понимание твоих усилий неясно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...