2013-07-12 3 views
12

Я хотел бы отлаживать сложный сценарий T-SQL, используя SSMS 2012.Как просмотреть данные в переменных таблицы во время сеанса отладки в MS SQL Management Studio 2012?

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

В Locals окне я вижу все эти переменные, но их значение отображается как (table):

Locals window

Там нет никакого способа, чтобы просмотреть содержимое переменной через контекстное меню или нажав на переменная.

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

Immediate Window

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

+0

Возможного дубликату [Как увидеть значение табличного переменного во время отладки в T-SQL?] (Http://stackoverflow.com/questions/1900857/how-to-see -the-values-of-a-table-variable-at-debug-time-in-t-sql) – Faiz

ответ

12

В то время как я не могу найти какую-либо документацию, где бы то ни было, что явным образом заявляет, что вы не можете проверять переменные таблицы, я не считаю, что это возможно. От Transact-SQL Debugger

Местные жители и смотреть. Эти окна отображают текущие выделенные выражения Transact-SQL. Выражения являются предложениями Transact-SQL, которые оцениваются одним, скалярным выражением. Отладчик Transact-SQL поддерживает просмотр выражений, которые ссылаются на переменные Transact-SQL, параметры или встроенные функции, имена которых начинаются с @@. Эти окна также отображают значения данных, которые в настоящее время назначаются выражениям.

(Мой акцент)

То есть, вы можете только осмотреть скаляры.

Как к вашей попытке использовать Immediate окно, то Limitations on Debugger Command and Features говорит:

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


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

Вот почему я до сих пор, как правило, использовать «старые Skool»/«Printf» подходит для отладки SQL - включает в себя дополнительные SELECT * s свободно по всему коду, показывающий текущее состояние таблицы и дополнительные PRINT или RAISERROR сообщения, которые показывают другие государства и т. д. И тогда просто запускайте код нормально, пока вы не набросаете его на фигуру.

+0

Спасибо за ваши исследования, мои результаты тоже не дали. Я просто не хотел верить, что это невозможно, потому что это делает отладчик совершенно непригодным для моих глаз. Проблема «old-skool» -debugging заключается в том, что мы просто «расчесывали» код, чтобы не содержать отладочных/комментариев/недостижимых утверждений (как это требуется нашей политикой кодирования), и мне нужно вернуть их обратно ... –

9

Используя следующий код, вы можете увидеть содержимое своей таблицы как XML.

DECLARE @v XML = (SELECT * FROM <tablename> FOR XML AUTO) 

Полезно проверить, что возвращает ваши операторы SELECT. Я тестировал его, и он работает.

Подробнее here.

+1

Это не работает. Я не могу видеть окно @v в локалях. – Naren

+1

@Naren Я проверил это. Он работает в локальном окне, и я вижу значения, заполненные в переменной @v. Я использую студию управления SQL Server для SQL Server 2008 R2. – RBT

+0

Вы можете добавить ", ROOT ('rootNodeName')" в предложение "FOR XML". Это будет собирать несколько строк (если они есть) под одним корнем, что делает законным XML-документ, который можно просмотреть с помощью визуализатора XML вместо текстового визуализатора. – JohnL4

1

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

выберите * от @VarTable;

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

Надеется, что это помогает