Как просмотреть данные в переменных таблицы во время сеанса отладки в MS SQL Management Studio 2012?

Я хотел бы отлаживать сложный T-SQL script с использованием SSMS 2012.

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

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

Locals window

Невозможно просмотреть содержимое переменной через контекстное меню или щелкнуть по переменной.

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

Immediate Window

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

Ответ 1

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

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

(Мой акцент)

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

Что касается вашей попытки использовать окно Immediate, Ограничения в команде и функциях отладчика говорит:

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


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

Вот почему я все-таки склонен использовать подходы "old-skool" / "printf" для отладки SQL - добавьте дополнительные SELECT * либерально в код, показывающий текущее состояние таблиц, а также дополнительные сообщения PRINT или RAISERROR которые показывают другие состояния и т.д. И тогда просто запускайте код нормально, пока вы не набросаете его на фигуру.

Ответ 2

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

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

Полезно проверить, как вернутся операторы SELECT. Я тестировал его, и он работает.

Подробнее здесь.

Ответ 3

Я просто просто вставляю выражения select в свой script и отображает его в окне результатов.

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

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

Надеюсь, что это поможет