0

我需要编写一个简单的 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'
4

2 回答 2

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 存储过程可能是更好的选择

于 2012-08-23T15:24:14.880 回答
1

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

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

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

于 2012-08-23T15:14:16.800 回答