Есть ли способ отладки запроса SQL Server 2008? - PullRequest
3 голосов
/ 20 апреля 2010

Есть ли способ отладки запроса SQL Server 2008?

Ответы [ 4 ]

4 голосов
/ 20 апреля 2010

Да. Вы можете использовать отладчик T-SQL: http://technet.microsoft.com/en-us/library/cc646008.aspx

Вот как вы выполняете запрос: http://technet.microsoft.com/en-us/library/cc646018.aspx

1 голос
/ 20 апреля 2010

Что именно вы подразумеваете под отладкой? Вы видите неверные данные? Вы получаете неожиданные повторяющиеся строки?

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

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

На каждом шаге вы должны знать, сколько записей вы ожидаете.

Как только вы вводите что-то вроде соединения или условия, которые не соответствуют вашему прогнозу, вы знаете, что нашли формулировку проблемы.

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

Если вы хотите выполнить только до определенной точки в хранимой процедуре, тогда вы можете RETURN в любое время и остановить обработку.

Если у вас есть временные таблицы, которые должны быть уничтожены между выполнениями во время отладки вашей процедуры, я обычно использую трюк для создания метки, такой как -

cleanup:

тогда в любой момент, когда я захочу под залог, я могу goto cleanup (я знаю, что goto ужасен, но он отлично работает при отладке sprocs)

0 голосов
/ 20 апреля 2010

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

Что я делаю, так это когда у меня сложный sp для отладки.

Сначала я создаю тестовую переменную. Я устанавливаю это = 1, когда я хочу проверить. Это обеспечит откат всех действий и транзакций в конце (не нужно фактически изменять базу данных, пока вы не убедитесь, что proc делает то, что вы хотите.), Убедившись, что для оператора commit требуется установить тестовую переменную до 0.

В конце процедуры у меня обычно начинается тест if = 1 КОНЕЦ утверждения и между началом и концом, я помещаю выбранные оценки для всех вещей, значения которых я хочу видеть. Это может включать в себя любые переменные таблицы или временные таблицы, записи в конкретной таблице после вставки, записи, которые я удалил, или все, что мне нужно увидеть. Если я тестирую несколько раз, я могу закомментировать ссылки на таблицы, которые, как я знаю, являются правильными, и сосредоточиться только на тех, которые я изменил, которые идут вокруг. Теперь я вижу, каков эффект моего процесса, и изменения откатываются, если они были не правы. Чтобы фактически зафиксировать изменения (а не увидеть промежуточные этапы), я просто изменяю значение тестовой переменной.

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

0 голосов
/ 20 апреля 2010

Да, вам нужно установить точку останова.

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