Немедленное окно при отладке сохраненных процессов в Visual Studio 2005 - PullRequest
4 голосов
/ 15 июля 2009

Отладка хранимых sproc может быть опасной, и я не смог использовать Immediate Window так, как я думал.

Доступно ли немедленное окно при отладке сохраненных процессов в VS 2005?

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

Можно ли создать визуализатор отладчика для запроса таблиц во время отладки хранимых процедур TSQL

PS : я знаю, что есть лучший способ заархивировать ваше приложение, чтобы вам никогда не приходилось находиться в такой ситуации, но я смотрю на какой-то устаревший код, поэтому, пожалуйста, пощадите;)

Ответы [ 4 ]

2 голосов
/ 08 сентября 2009

Я не думаю, что когда-либо слышал о чем-то, что позволяет вам отлаживать хранимые процедуры SQL, как вы можете отлаживать "настоящий" код приложения. (Это относится к 7.0, 2000 и 2005 гг., Но жюри по-прежнему на 2008 г.).

Когда мне нужно выполнить серьезную отладку незнакомых хранимых процедур (которые могут быть моими, спустя месяцы после их написания), я вырезаю и вставляю код в окно запроса SSMS, заменяю параметры соответствующими DECLARE и SET, закомментируйте проблемные утверждения (ВОЗВРАТ) и запустите его. В большинстве случаев временные таблицы (# временные таблицы, а не переменные @ таблицы) будут оставаться там после запуска. Поиск и замена на # на ## делает их глобальными и доступными из других окон запросов, что может помочь. Комментирование блоков кода и запуск некомментированных разделов может быть очень полезным.

Некоторые другие уловки, которые я сделал для серьезно уродливых процедур (сотни или даже тысячи строк кода):

Добавить параметр @Debug, значение по умолчанию 0. В соответствующих разделах процедуры добавьте блоки «IF @Debug = 1», в которых вы можете распечатать текущие значения переменных и / или содержимое временной таблицы. Полезная форма может быть:

SELECT 'DebugBlock3' DataSet, * from #MyTempTable

Основываясь на этом, еще одна хитрость заключается в определении таблиц #Temp следующим образом:

IF @Debug = 0 or object_id('tempdb.dbo.#MyTempTable') is null
    CREATE TABLE #MyTempTable
     (
       ProductId  int  not null
      ,etc
     )

При этом, если вы сначала СОЗДАЕТЕ таблицу #Temp в окне запроса, а затем из этого же окна вызываете процедуру с @Debug = 1, после завершения процедуры временная таблица все еще будет там, заполненная любым окончательное содержание было.

При работе с динамическим кодом (содрогание) у меня неизменно устанавливается @Debug для работы со значениями 0, 1 и 2 с комментарием

--  Debug control:  0=do the work, 2=List out dynamic code, 1=Both

И последующие блоки кода, такие как:

IF @Debug > 0
 BEGIN
    PRINT 'Comment about the following chunk of text'
    PRINT '-----------------------------------------------------------'
    PRINT @Command
 END
IF @Debug < 2
    EXECUTE (@Command)

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

1 голос
/ 09 сентября 2009

Нет, эта функция, к сожалению, не реализована через Immediate Window. Я не верю, что это было в любой версии Visual Studio

0 голосов
/ 09 сентября 2009

Я склонен писать хранимые процедуры с инструкциями Print внутри них для целей отладки.

Затем, прежде чем выполнить хранимую процедуру, я подключаюсь к информационному сообщению SqlConnections, затем выполняю Debug.Write для возвращенного сообщения.

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.infomessage%28VS.71%29.aspx

Для запроса временных таблиц вы можете во время отладки сделать их глобальными временными таблицами http://www.sqlteam.com/article/temporary-tables

Это означает, что вы можете запрашивать их вне хранимого процесса, но все равно распознавать их как временные таблицы. Глобальные временные таблицы называются ## вместо просто #.

0 голосов
/ 04 сентября 2009

Если ваши хранимые процессы находятся в oracle, вы можете использовать функцию отладки, предоставляемую разработчиком oracle sql. Этот инструмент предоставляет вам возможность компилировать и отлаживать ваши процессы, устанавливая точки останова там, где это необходимо. Слепо пойти на это, если хранимый процесс написан в PL SQL. В моем проекте я не отлаживаю хранимые процессы из Visual Studio. Вместо этого я получаю входные данные, которые передаются в сохраненный процесс, иду в этот инструмент и запускаю процесс в режиме отладки с этим вводом. AFAIK, вы не можете запрашивать ваши временные таблицы при отладке из VS.

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