Как увидеть значения табличной переменной во время отладки в 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.