我需要编写一个简单的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'
答案 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存储过程可能是更好的选择