编写SQL日志过程

时间:2012-08-23 15:06:19

标签: sql sql-server sql-server-2005

我需要编写一个简单的SQL日志过程,可以这样调用:

Log("This is my param1 = {0}, param2 = {1} and param3('{2}')", 
     @param1, @param2, @param3)

应将输出重定向到SQL Server“C:\ output.txt”

上的文件

是否可以使用 变量 参数的这种程序以及如何使用?

也许我可以使用

exec master..xp_cmdshell 'echo created > c:\output.txt'
exec master..xp_cmdshell 'echo appended data >> c:\output.txt'
exec master..xp_cmdshell 'echo more data >> c:\output.txt'

2 个答案:

答案 0 :(得分:1)

首先,SQL Server的T-SQL不允许存储过程的可变数量的参数,就像Java支持一样。但是,由于SQL Server 2005具有XML数据类型,您可以使用您的参数构建一个简单的XML,并将其作为第二个参数发送,首先是带有占位符的日志语句。在存储过程中,您可以从XML中读取这些值。

其次,xp_cmdshell要求你具有'sa'权限,afaik。相反,您可以将这些日志语句写入临时表,并获取由管理员创建的存储过程,该过程采用表名和文件路径,并将表的内容转储到指定的文件路径。

根据以下评论之一编辑关于可变数量参数的评论

答案 1 :(得分:1)

只要您拥有有限数量的参数,就可以在SQL Server中使用可为空的参数来实现可选参数

所以

create proc prcLog
    @Format varchar(1000),
    @p1 varchar(100) = null,
    @p2 varchar(100) = null,
    @p3 varchar(100) = null,
    ....

exec prcLog '{0}', 'a'
exec prcLog '{0} : {1}', 'a', 'b'

考虑到文件IO和字符串操作的数量,CLR存储过程可能是更好的选择