T-SQL中的调试输出

sil*_*or 14 t-sql debugging

在调试T-SQL时,是否有类似Javascript alert();函数的东西,或者console.log我可以用来在测试和调试SQL脚本或存储过程时输出值?

e-m*_*mre 13

您可以使用PRINT将消息输出到日志,但我个人更喜欢使用低严重性的RAISERROR,因为PRINT输出并不总是立即打印到屏幕上.特别是在长跑SP中.另一方面,像这样的东西立即打印:

RAISERROR ('My Message', 10, 1)
Run Code Online (Sandbox Code Playgroud)

不要被名称ERROR所迷惑,严重性为10的错误不会造成伤害.

至于CTE,我认为你在自引用公用表表达式方面遇到了问题.但是你应该知道没有办法在执行递归CTE时插入PRINT语句.
为了调试这些,我通常会在结果集中添加一个额外的"迭代索引"列,该列随每次迭代递增.还有一些其他专栏来帮助评估情况.使用结果集的其余部分进行检查时,通常可以提供良好的洞察力.像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
Run Code Online (Sandbox Code Playgroud)


小智 5

我使用带有提示“WITH NOWAIT”的指令“RAISERROR”,如下所示:

RAISERROR('My message here', 10, 1) WITH NOWAIT
Run Code Online (Sandbox Code Playgroud)

该指令及时显示消息。