将详细信息记录到SQL Server中的文件

时间:2011-09-06 15:00:17

标签: sql debugging sql-server-2008 file

有没有人有一些代码可以简单地将一些详细信息记录到SQL查询(或存储过程或触发器)中的文件中?我不是在寻找任何花哨的东西。我想要做的就是快速将调试信息放入我的SQL中,就像人们使用警报进行JavaScript调试一样。我看着使用Lumigent,但这对我想做的事情来说似乎有些过分。我不关心日志记录的格式是什么。下面是我想要做的一个简单示例。

示例:

DECLARE @x int;
SET @x = '123'
-- log the value of @x

============

9/6/2011 @ 4:01 pm update

我尝试了下面的sqlcmd,效果很好。但是当我想调试时,当存储过程中有100个参数时,它不能很好地工作。在这种情况下,我需要在我的客户端代码中设置一个断点,然后获取每个参数的值。然后去输入exec命令,然后查看输出文件。我想要做的就是将一行简单的代码放入我的SQL中(如果需要多行代码,可能会调用另一个存储过程),这会将变量值写入文件。而已。我只是用它来进行调试。

2 个答案:

答案 0 :(得分:2)

一种非常简单的方法是使用OSQLSQLCMD来运行您的程序。这些是用于执行SQL命令/过程/脚本的命令行方法。

使用这些实用程序,您可以将输出(通常出现在SSMS中“消息”选项卡中的内容)传输到文本文件。

如果你这样做,在你的例子中代码将是:

DECLARE @x int;
SET @x = '123'
PRINT @x

如果您多次运行相同的程序,您只需将其保存为单行批处理文件,以便于测试。

答案 1 :(得分:0)

现在有了更多背景,我想我可以将我的评论推广到答案:

为什么它必须是一个文件?如果这只是在调试期间,您不能轻易地登录到表,并且当您想要查看最近的结果时:

SELECT TOP (n) module, parameters, etc. 
    FROM logTable 
    ORDER BY DateCreated DESC;

您可以简化日志记录,或者至少通过使用包含@@PROCID等其他参数的存储过程来集中日志记录,从而更容易从一个过程复制到过程。有关这里的一些想法,请参阅this article I wrote - 它适用于每个存储过程调用只记录一次,但您可以在任何存储过程中随意调用它。

这似乎比使用古老的基于文件的日志方法要麻烦得多。您已经在使用数据库,请充分利用!

如果您因任何原因承诺使用文件(如果您列举这些原因可能有助于理解或反击),那么下一个最佳选择可能是CLR,如前所述。在这种情况下,完整的解决方案可能超出了这个问题的范围,但在线有大量的例子。