2009-03-05 2 views
6

Большинство моих SP могут быть просто выполнены (и протестированы) с введенными данными вручную. Это хорошо работает и использование простых инструкций PRINT позволяет мне «отлаживать».Какой ваш предпочтительный метод для отладки хранимых процедур MS SQL?

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

У меня есть небольшой опыт работы с профилировщиком, но я не нашел способ изучить, что происходит в строках в моих хранимых процедурах.

Каковы ваши методы?

Спасибо, как всегда.

Примечание: Я предполагаю, что использование SQL Server 2005+

ответ

8

Профилировщик очень удобен, просто добавьте SP: StmtStarting events и отфильтруйте активность вплоть до вашего процесса, установив SPID = xxx. После того, как вы его настроите, вам будет интересно посмотреть, что происходит.

+0

+1 это точно: иногда вам приходится отбирать отладчик (надеюсь, как это написано + тесты есть средства никогда) – eglasius

4

Вы действительно можете присоединить отладчик к вашему SQL сервер :) - от против, учитывая вы настроили, что на вашем SQL Server.

Проверьте эту ссылку для получения дополнительной информации, обратите внимание, что вы можете установить точки останова :) https://web.archive.org/web/20090303135325/http://dbazine.com/sql/sql-articles/cook1.

Проверить эту ссылку для более общего набора информации: http://msdn.microsoft.com/en-us/library/zefbf0t6.aspx

Обновление: Что касается «Есть, однако случаи, когда участвует более одной хранимой процедуры и найти достоверные данные для входа является утомительным легче. просто вызвать вещи из моего веб-приложения ».

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

1

Я предпочитаю использовать хранимые процедуры для получения набора данных и выполнять любую сложную «работу» со стороны приложения. Потому что вы правы, пытаясь «отлаживать» то, что происходит внутри кишки многослойной, курсор-петли, temp-table с использованием вложенной хранимой процедуры очень сложно.

Сообщалось, что MS KB 316549 описывает, как использовать визуальную студию для отладки хранимых процедур.

Согласно этой статье, существует целый ряд ограничений для отладки в этой моде:

  • Вы не можете «ломать» исполнение.
  • Вы не можете редактировать и продолжать.
  • Вы не можете изменить порядок выполнения инструкции.
  • Хотя вы можете изменить значение переменных, ваши изменения могут не вступить в силу, поскольку значения переменных кэшируются.
  • Вывод инструкции SQL PRINT не отображается.

Edit: Очевидно, что если вы тот человек делает это хранимую процедуру, то не делает «многая слоистой, курсор зацикливания, темп-таблицы, используя, и вложенный».В моей роли DBA, однако, это почти то, что я ежедневно встречаю с разработчиками приложений.

+0

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

+0

Уверен, с этим будет трудно справиться, если вы предположите, что это ужасно написано. Я бы сказал, что то же самое для кода C# - если разработчик пишет мусор, вы получите мусор. –

+0

Я бы никогда не подумал об использовании «многослойной, курсово-петлевой, временной таблицы с использованием многоуровневой вложенной хранимой процедуры». Практически всегда есть лучшие способы ведения бизнеса. Я думаю, что точка JohnW заключалась в том, что если бы вы делали такую ​​вещь, это было бы плохо по определению персоналу базы данных. – HLGEM

0

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

0

Моя команда использует SPs по правилам в качестве нашего интерфейса к базе данных; мы делаем это так, чтобы пользователь приложения мог ТОЛЬКО выполнять SP (с нашим соглашением об именах).

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

Вы всегда должны ВСЕГДА тестировать SP как можно тщательнее без использования какого-либо прикладного уровня (например, через Management Studio).

0

Убедитесь, что вы шаг в основной хранимая процедура в VS2005/2008, когда он сталкивается вложенную функцию, нажмите F11 (шаг в), чтобы войти в .. . продолжить отладки ... Это было не очень очевидно из меню отладки.

1

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

+0

Итак, когда ваши тесты терпят неудачу, и вы не знаете, почему, TDD делает то, что ? –

+0

@Mr Grieves, , когда мои тесты терпят неудачу, я почти всегда знаю, почему - мои тесты обычно говорят мне, что не так. –

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