При отладке T-SQL есть ли что-то вроде функции Javascript alert();
или console.log
, которую я могу использовать для вывода значений при тестировании и отладке SQL-скриптов или хранимых процедур?
Отладочный вывод в T-SQL
Ответ 1
Да, он называется PRINT
. См. Здесь:
Ответ 2
Вы можете использовать PRINT для вывода сообщений в журнал, но я лично предпочитаю использовать RAISERROR с низкой степенью серьезности, потому что вывод PRINT не всегда печатается на экране немедленно. Особенно в длинных SP. С другой стороны, что-то вроде этого печатает сразу:
RAISERROR ('My Message', 10, 1)
Не обманывайте себя именем ERROR, ошибка с серьезностью 10 не вредит.
Что касается CTE, я думаю, что у вас возникла проблема с самостоятельной ссылкой на Common Table Expressions. Но вы должны знать, что нет способа вставить инструкцию PRINT в выполнение рекурсивного CTE.
Чтобы отлаживать те, я обычно добавляю дополнительный столбец "Итерационный индекс" в набор результатов, который увеличивается с каждой итерацией. Также некоторые другие столбцы помогают оценить ситуацию. При обследовании с остальной частью набора результатов он обычно дает хорошее представление. Что-то вроде IDX col down. Другие столбцы помогают мне изучить условия соединения, чтобы узнать, что не так:
WITH x AS (
SELECT 1 AS IDX, A._ID as ID_A, NULL as ID_B
FROM MYTABLE A
WHERE A._ID = 6
UNION ALL
SELECT X.IDX + 1, A._ID, B._ID
FROM MYTABLE B INNER JOIN X ON B._ID = X._ID + 1
WHERE B._ID < 20
)
SELECT *
FROM X
Ответ 3
Операция PRINT помогает. Вместо того, чтобы ПЕЧАТЬ выдавать результат на панель результатов, я иногда вставляю вывод отладки в таблицу.
В новой версии SQL (2008 и 2008R2) есть опция debug. Не так прост, как отладка проекта С# в Visual Studio, но неплохая. Вы можете пойти шаг за шагом, а также создать список наблюдения.
Ответ 4
Я использую инструкцию "RAISERROR" с подсказкой "WITH NOWAIT", как показано ниже:
RAISERROR('My message here', 10, 1) WITH NOWAIT
Эта команда отображает сообщение во времени.