Отладочный вывод в T-SQL

При отладке T-SQL есть ли что-то вроде функции Javascript alert(); или console.log, которую я могу использовать для вывода значений при тестировании и отладке SQL-скриптов или хранимых процедур?

Ответ 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

Эта команда отображает сообщение во времени.