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

将详细信息记录到SQL Server中的文件中,sql,debugging,sql-server-2008,file,Sql,Debugging,Sql Server 2008,File,是否有人有一些代码可以简单地将一些详细信息记录到SQL查询、存储过程或触发器中的文件中?我不想找什么花哨的东西。我所要做的就是快速将调试信息放入我的SQL中,就像人们使用警报进行JavaScript调试一样。我曾考虑过使用Lumigent,但对于我想做的事情来说,这似乎有些过头了。我不在乎日志的格式是什么。下面是我想做的一个简单的例子 例如: DECLARE @x int; SET @x = '123' -- log the value of @x ============ 2011年9月6日

是否有人有一些代码可以简单地将一些详细信息记录到SQL查询、存储过程或触发器中的文件中?我不想找什么花哨的东西。我所要做的就是快速将调试信息放入我的SQL中,就像人们使用警报进行JavaScript调试一样。我曾考虑过使用Lumigent,但对于我想做的事情来说,这似乎有些过头了。我不在乎日志的格式是什么。下面是我想做的一个简单的例子

例如:

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

2011年9月6日下午4:01更新
我尝试了下面的sqlcmd,效果很好。但是当我想要调试时,如果存储过程上有100个参数,它就不能很好地工作。在这种情况下,我需要在客户端代码中设置一个断点,然后获取每个参数的值。然后输入exec命令,然后查看输出文件。我所要做的就是将一行简单的代码放入我的SQL中,如果需要多行代码,可能会调用另一个存储过程,将变量值写入文件。就这样。我只是为了调试而使用它。

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

使用这些实用程序,您可以将SSMS中消息选项卡中通常显示的输出通过管道传输到文本文件

如果您这样做,在您的示例中,代码将是:

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

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

现在有了更多背景知识,我想我可以将我的评论升级为一个答案:


为什么它必须是一个文件?如果这只是在调试期间进行的,那么当您想要查看最近的结果时,是否可以同样轻松地登录到表:

SELECT TOP (n) module, parameters, etc. 
    FROM logTable 
    ORDER BY DateCreated DESC;
您可以简化日志记录,或者至少通过使用一个存储过程来简化从一个过程到另一个过程的复制,该存储过程采用各种参数(如@PROCID和其他参数)来集中日志记录。请参阅这里的一些想法-它只适合于在每个存储过程调用中记录一次日志,但您当然可以在任何存储过程中随时调用它

这似乎比使用一种古老的基于文件的日志方法要简单得多。你已经在使用数据库了,好好利用吧


如果您承诺使用一个文件,无论出于何种原因,如果您列举这些原因,它可能有助于理解或反驳,那么下一个最佳选择可能是CLR,正如前面提到的。在这种情况下,完整的解决方案可能超出了这个问题的范围,但网上有大量的示例。

您最好的选择可能是CLR,虽然这不是一个5分钟的工作。CLR代表什么?公共语言运行时-它允许您用您最喜欢的.NET语言C/VB等编写过程/函数,并使您能够更好地处理仅在.NET或SQL Server之外的功能,如文件系统访问。哇,我对CLR执行引擎、IL指令和编译器非常熟悉,事实上在上周。哈哈!实际上,我现在正在阅读.NET公共语言运行库的编译书籍。:-。你把我搞糊涂了。。我想这是一个不同的首字母缩略词。但是我不知道你可以用SQL来做这件事!我得花点时间来学习这个!!我会投你一票的,为什么一定要有文件?如果这只是在调试期间,您不能同样轻松地登录到一个表,并且当您想要查看最近的结果时,请从logTable ORDER BY DateCreated DESC;中选择TOP n*;?这似乎比使用一种古老的基于文件的日志方法要简单得多。你已经在使用数据库了,好好利用吧!手动运行打印命令时,我可以看到该命令。。但我还没有把它写进文件。如果您知道设置,请分享。谢谢。@MacGyver先生-从命令行使用OSQL即可:OSQL-E-S ServerName-d DatabaseName-q EXITexec dbo.MyStoredProc-o C:\Logs\MyOutputFile。txt@Mr.MacGyver对命令行参数的解释在我在答案中的链接中。这很好,我会投票给你帮助。。。sqlcmd-S dev-sql-02-d lims_dev-U sa-P密码_for_sa-Q exec procepreaccessingsave'E12345',54321,7528,4252-o C:\Users\MacGyver\Desktop\Logs\sql_Log.csv。。。。但这与SSMS中的结果窗口相同。所以它不能完全回答我的问题。我只是在寻找将变量写入文件的SQL代码。还是要做大量的工作?我会更新我的问题,让我弄清楚我在找什么。这个问题是,如果你在交易的中间,它就要退役了,您的日志会自动回滚,您看不到消息。@但您可以在启动事务之前记录参数等,也可以先将其记录到@table变量中,该变量将比任何回滚的事务都有效。