Як бачити значення змінної таблиці під час налагодження в T-SQL?


187

Чи можемо ми побачити значення (рядки та комірки) у змінній таблиці, що оцінюється в студії управління SQL Server (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 у вікні місцевих жителів, або ви можете додати @vдо вікна годинника.

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


1
Це, безумовно, обхід, який досить хороший, щоб невеликі таблиці були представлені як XML.
Файз

4
Але все одно не переставай читати! Ще один дивовижний варіант нижче! Чудова нитка !!
Майк М

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

1
Ви можете додати ", ROOT ('rootNodeName')" до пункту "ЗА XML". Це дозволить зібрати кілька рядків (якщо такі є) під одним коренем, що створює законний XML-документ, який можна переглядати за допомогою візуалізатора XML замість текстового візуалізатора.
JohnL4

2
Використовуючи SQL Server 2016 або ніколи, ви також можете використовувати JSON версію цього DECLARE @v nvarchar(max) = (SELECT * FROM <tablename> FOR JSON AUTO)
Суссук

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, який ви хочете запустити, якщо вам потрібен додатковий контроль.
Джаммін

2
Використовуйте запит вибору де, у вікні перегляду?
Фаїз

використовуйте функцію select у межах процедури або будь-який запит adhoc, який ви виконуєте
solairaja

Але те, що мені потрібно перевірити, це функція, що оцінюється за таблицею, і вона видає помилку "Вибір операторів, включених у функцію, не може повернути дані клієнту". Чи є інший спосіб, спеціально для перевірки за допомогою наданих інструментів налагодження?
Фаїз

3
Ні, це не вирішує питання. Я думаю, що це неможливо без додаткових плагінів.
Фаїз

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: Starting або RPC: Завершена подія в групі «Збережені процедури» та стовпці «TextData», і при натисканні на запис у журналі з'являться оператори вставлення для змінної таблиці. Потім можна скопіювати текст і запустити в студії управління.

Вибірка зразка:

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. Прибуток !!

Відповідь messi19 повинна бути прийнятою однією IMHO, оскільки вона простіша за мою і виконує цю роботу більшу частину часу, але якщо ти схожий на мене і маєш змінну таблиці всередині циклу, який ти хочеш перевірити, це робить роботу непогано без особливих зусиль або зовнішніх плагінів SSMS.


Це абсолютно протилежне тому, що намагається зробити ОП.
Джеймі Маршалл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.