编写一个SQL日志过程
我需要编写一个简单的SQL日志过程,可以这样调用:编写一个SQL日志过程,sql,sql-server,sql-server-2005,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
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'
首先,SQLServer的T-SQL不允许像Java所支持的那样为存储过程提供可变数量的参数。但是,由于SQLServer2005具有XML数据类型,因此可以使用参数构建简单的XML,并将其作为第二个参数发送,第一个参数是带有占位符的log语句。在存储过程中,可以从XML读回这些值 其次,xp_cmdshell要求您拥有“sa”权限,afaik。相反,您可以将这些日志语句写入临时表,并获取管理员创建的存储过程,该存储过程采用表名和文件路径,并将表的内容转储到指定的文件路径
根据下面的注释之一编辑关于可变参数数的注释只要参数数有限,就可以在SQL server中使用可为空的参数来实现可选参数 所以
考虑到文件IO和字符串操作的数量,CLR存储过程可能是更好的选择…嗯,SQL如何知道使用多个参数?这看起来就像是在SQL之外调用的东西(特别是因为您通常无法“访问”系统维护的实际文件)。您打算如何调用此函数?我需要一个“通用”SQL server端函数来记录调试存储过程所需的信息。我需要“调试”文件中的一些信息。我知道还有很多其他选项需要调试,但我喜欢在txt文件中编写。出于安全和其他原因,SQL Server通常不支持向文件发送输出,尽管有一些缓慢而笨拙的方法可以强制执行(如
xp\u CmdShell
)。通常,如果要从SQL Server记录内容,最好将其记录到1)表、2)SQL Server错误日志或3)系统事件日志中。所有这些都是受支持的,并且相对容易。我需要在调试存储过程时使用此日志,这可以通过事务调用。当我回滚事务时,日志表中的任何行都将回滚。。。在文本文件中,我有所有的跟踪…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'