将批处理文件状态/计时记录到SQL Server

时间:2012-12-07 16:58:41

标签: sql-server batch-file sqlcmd

我想增强现有bat文件以将执行持续时间记录到SQL Server表。当前的bat文件只有一行调用命令行实用程序。

我以为我会利用这样的东西SQL Statements in a Windows Batch File。伪代码:

StartTime = Now()
hyperioncommandlineshell.cmd /a:parm1 /b:parm2 /c:parm3
sqlcmd.exe -b -S myhost -E -d mydatabase -Q "Insert Into MyTable Values (Current_Timestamp, 'MyProcess', Now() - StartTime)" -W    

有些问题:

  1. 运行此bat文件的服务器没有SQL工具,我在this帖子中看到它确实需要安装(你不能只复制{{1文件)。这将遇到阻力。是否有另一种方法可以从批处理文件执行SQL语句而无需安装软件?

  2. 我没有BAT文件的经验。有人可以提供关于如何获得过程持续时间的指导(比如抓住开始时间,并在结束时计算差异)?

  3. 我可能会尝试使用我更熟悉的其他工具,但我正在尝试这样做,以便更改只影响一个现有对象,并且不需要其他对象。

1 个答案:

答案 0 :(得分:1)

Windows计算机已经安装了ODBC驱动程序,因此您可能拥有SQL Server的ODBC驱动程序。如果是这样,那么您可以使用Microsoft的osql实用程序从DOS运行T-SQL语句。以下是MSDN上的文档:

http://msdn.microsoft.com/en-us/library/aa214012(v=SQL.80).aspx

它是专为SQL Server 2000设计的,因此在连接到更高版本的SQL Server时可能会出现一些问题,但值得一试。如果它工作,那么您将不必安装任何特殊的连接到您的SQL服务器(虽然您可能需要为服务器创建ODBC数据源名称...)。在Windows Vista +中,单击开始,然后键入 ODBC 以打开ODBC数据源编辑器。

使用SQLCMD将要求您安装Native Client,或至少安装SNAC(讨论主题:http://us.generation-nt.com/answer/how-install-only-sqlcmd-exe-utility-help-87134732.html),以便在不安装整个Native Client的情况下运行SQLCMD(尽管如此,SNAC仍然需要安装)。我之前没有听说过SNAC,所以需要进行一些研究。我认为安装任何东西都会遇到相同的阻力,所以如果你能克服这种阻力,安装Native Client可能是你最好的选择。

至于经过的时间。您可以使用%DATE% %TIME%获取当前日期/时间。所以你可以使用类似下面的内容来捕获开始时间,运行你的进程然后捕获结束时间 - 将它们全部发布到数据库:

set StartTime=%DATE% %TIME%
hyperioncommandlineshell.cmd /a:parm1 /b:parm2 /c:parm3
set EndTime=%DATE% %TIME%
sqlcmd.exe -b -S myhost -E -d mydatabase -Q "Insert Into MyTable Values ('%StartTime%', 'MyProcess', '%EndTime%')" -W 

您将无法使用DOS本身进行StartTime - EndTime计算,但您可以在表中存储开始和结束时间,并使用SQL来执行此操作。

%DATE%%TIME%的格式基于机器设置使用的格式。您可以在DOS提示符下键入echo %DATE% %TIME%以查看它的格式。您可能必须将这些值存储在varchar字段中,因为格式可能无法自动转换为datetime值。如果它确实自动转换,那么你可以在DOS的SQL语句中进行计算,如下所示:

sqlcmd.exe -b -S myhost -E -d mydatabase -Q "Insert Into MyTable Values ('%EndTime%' - '%StartTime%', 'MyProcess')" -W

(仅供参考 - 我在所有示例中使用了您的伪代码,因此没有测试任何内容。)