Как увидеть значения табличной переменной во время отладки в T-SQL?


187

Можем ли мы увидеть значения (строки и ячейки) в табличной переменной в SQL Server Management Studio (SSMS) во время отладки? Если да, то как?

введите описание изображения здесь

Ответы:


31

Это еще не реализовано в соответствии с этой ссылкой Microsoft Connect : Microsoft Connect



2
И вот мы в 2016 году. Не лучше. Ссылка Connect также больше не работает.
— dotNET

5
Если честно, на самом деле это не ответ, так как он не отвечает на вопрос, вопрос в том, как это сделать (а не в том, есть ли у SSMS какая-либо функция для этого), заявив, что это не реализовано, в то время как есть способы отображения значений, но это не так. очень полезно.
— Разван Флавий Панда

1
Пожалуйста, удалите этот ответ. Ответ ниже должен быть принятым ответом.
— Vortex852456

2018, все еще нет.
— AgentFire

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

Вставьте вышеприведенный оператор в точку, где вы хотите просмотреть содержимое таблицы. Содержимое таблицы будет отображаться в виде XML в окне locals, или вы можете добавить @vего в окно watches.

введите описание изображения здесь


1
Это определенно обходной путь, который достаточно хорош для представления небольших таблиц в виде XML.
— Faiz

4
Но все равно не прекращайте читать! Еще один замечательный вариант ниже! Отличная тема!
— Майк М,

1
У меня были большие таблицы с XML, который не очень удобен для чтения. Я делаю еще один шаг - скопируйте XML и вставьте в xmlgrid.net, и вы сможете увидеть XML в виде таблицы. Визуализация таблицы действительно помогает. Ожидание выпуска SSMS, в котором есть средство просмотра таблиц, такое как средство просмотра данных в Visual Studio.
— Мойз Танкивала

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

2
Используя SQL Server 2016 или никогда, вы также можете использовать эту версию JSON DECLARE @v nvarchar(max) = (SELECT * FROM <tablename> FOR JSON AUTO)
— Sousuke

18

Этот проект https://github.com/FilipDeVos/sp_select имеет хранимую процедуруsp_select которая позволяет выбирать из временной таблицы.

Использование:

exec sp_select 'tempDb..#myTempTable'

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


6
Отлично
— подходит

Также зависает, если есть открытая транзакция, поэтому не стоит использовать отладку теста в такой среде, как tSQLt, которая всегда открывает транзакцию в начале теста.
— Натан

1
WOW WOW WOW WOW
— vothaison

Хорошо - было бы здорово, если бы вы могли сортировать по одному столбцу или двум
— user2486488

6

В хранимой процедуре создайте глобальную временную таблицу ## temptable и напишите запрос вставки в вашей хранимой процедуре, который вставляет данные из вашей таблицы в эту временную таблицу.

Как только это будет сделано, вы можете проверить содержимое временной таблицы, открыв новое окно запроса. Просто используйте "select * from ## temptable"


1

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

http://www.simple-talk.com/sql/learn-sql-server/management-studio-improvements-in-sql-server-2008/


Да, согласился лучший и самый быстрый вариант. Просто сделайте это, выделите и выполните только тот SQL, который вы хотите запустить, если вам нужно больше контроля.
— Jammin

2
Используйте запрос выбора где, в окне просмотра?
— Faiz

используйте select внутри процедуры или любой специальный запрос, который вы выполняете
— solairaja

Но мне нужно протестировать табличную функцию, которая выдает ошибку «Операторы выбора, включенные в функцию, не могут вернуть данные клиенту». Есть ли какой-либо другой способ, специально для проверки с помощью предоставленных инструментов отладки?
— Faiz

3
Нет, это не решает вопрос. Я думаю, что это невозможно без каких-либо дополнительных плагинов.
— Faiz

1

Если вы используете SQL Server 2016 или новее, вы также можете выбрать его как результат JSON и отобразить его в JSON Visualizer, его гораздо проще читать, чем в XML, и он позволяет фильтровать результаты.

DECLARE @v nvarchar(max) = (SELECT * FROM Suppliers FOR JSON AUTO)

введите описание изображения здесь


0

Я пришел к выводу, что это невозможно без каких-либо плагинов.


Я видел некоторые предварительные версии Visual Studio 2010. Очень необычные, сложные и подробные ... и демонстратор не знал, можно ли просматривать временные таблицы в режиме отладки. Может быть, когда он выйдет, но я не задерживаю дыхание.
— Филипп Келли

0

SQL Server Profiler 2014 перечисляет содержимое параметра табличного значения. Может работать и в предыдущих версиях. Включите SP: Запуск или RPC: Завершенное событие в группе хранимых процедур и столбце TextData, и когда вы нажмете на запись в журнале, у вас появятся операторы вставки для табличной переменной. Затем вы можете скопировать текст и запустить в Management Studio.

Пример вывода:

declare @p1 dbo.TableType
insert into @p1 values(N'A',N'B')
insert into @p1 values(N'C',N'D')

exec uspWhatever @PARAM=@p1

-1

Почему бы просто не выбрать таблицу и просмотреть переменную таким образом?

SELECT * FROM @d

4
Пожалуйста, объясните, как это сделать. Добавление SELECT * FROM @Tableк отлаживаемому сценарию не приводит к выводу результатов в окно результатов.
— StingyJack

-3

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

  1. Создайте новый запрос с любыми параметрами процедуры, объявленными и инициализированными сверху.
  2. Вставьте в тело вашей процедуры.
  3. Добавьте старый добрый запрос выбора сразу после инициализации вашей табличной переменной данными.
  4. Если 3. не является последним оператором в процедуре, установите точку останова на той же строке, начните отладку и продолжайте прямо до точки останова.
  5. Profit !!

ИМХО ответом messi19 должен быть принятый ответ, так как он проще, чем мой, и большую часть времени выполняет свою работу , но если вы похожи на меня и у вас есть переменная таблицы внутри цикла, которую вы хотите проверить, то это хорошо работает без особых усилий или внешних плагинов SSMS.


Это полностью противоположно тому, что пытается сделать ОП.
— Джейми Маршалл
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.