1

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

我想我会利用这样的东西,Windows Batch File 中的 SQL 语句。伪代码:

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 工具,我从这篇文章中看到它确实需要安装(你不能只复制sqlcmd.exe文件)。这将遇到阻力。是否有另一种无需安装软件即可从批处理文件执行 SQL 语句的方法?

  2. 我没有使用 BAT 文件的经验。有人可以提供有关如何获取流程持续时间的指导(例如获取开始时间并计算结束时的差异)吗?

我可能会尝试使用我更熟悉的另一种工具,但我正在尝试在 bat 中执行此操作,以便更改仅影响一个现有对象,并且不需要其他对象。

4

1 回答 1

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 

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

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

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

(仅供参考 - 我对所有示例都使用了您的伪代码,因此没有进行任何测试。)

于 2012-12-07T18:02:50.017 回答