Sql server 将批处理文件状态/计时记录到SQL Server
我想增强现有的bat文件,以便将执行持续时间记录到SQL Server表中。当前bat文件只有一行调用命令行实用程序 我想我会利用像这样的东西。伪代码:Sql server 将批处理文件状态/计时记录到SQL Server,sql-server,batch-file,sqlcmd,Sql Server,Batch File,Sqlcmd,我想增强现有的bat文件,以便将执行持续时间记录到SQL Server表中。当前bat文件只有一行调用命令行实用程序 我想我会利用像这样的东西。伪代码: 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, 'MyProc
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
一些问题:
sqlcmd.exe
文件)。这将遇到阻力。是否有其他方法可以从批处理文件执行SQL语句,而无需安装软件我可能会尝试使用我更熟悉的另一个工具,但我正在尝试在bat中这样做,以便更改只影响一个现有对象,而不需要其他对象。Windows计算机已经安装了ODBC驱动程序,因此您可能有SQL Server的ODBC驱动程序。如果是这样的话,那么您可能可以让Microsoft的
osql
实用程序从DOS运行T-SQL语句。以下是MSDN上的文档:
它是为SQL Server 2000设计的,因此连接到SQL Server的更高版本可能会出现一些问题,但值得一试。如果它可以工作,那么您就不必安装任何特殊的东西来连接到SQL server(尽管您可能需要为服务器创建ODBC数据源名称…)。在Windows Vista+中,单击开始并键入ODBC以打开ODBC数据源编辑器
使用SQLCMD
需要安装本机客户端,或者至少需要安装SNAC(讨论线程:)来运行SQLCMD
,而不安装整个本机客户端(不过,仍然需要安装SNAC)。我以前没有听说过SNAC,所以这需要一些研究。我假设安装任何东西都会遇到同样的阻力,因此如果您能够克服这种阻力,那么安装本机客户端可能是您的最佳选择
至于经过的时间。您可以使用%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
(仅供参考-我在所有示例中都使用了您的伪代码,因此没有进行任何测试。)Windows计算机已经安装了ODBC驱动程序,因此您可能有一个用于SQL Server的ODBC驱动程序。如果是这样的话,那么您可能可以让Microsoft的
osql
实用程序从DOS运行T-SQL语句。以下是MSDN上的文档:
它是为SQL Server 2000设计的,因此连接到SQL Server的更高版本可能会出现一些问题,但值得一试。如果它可以工作,那么您就不必安装任何特殊的东西来连接到SQL server(尽管您可能需要为服务器创建ODBC数据源名称…)。在Windows Vista+中,单击开始并键入ODBC以打开ODBC数据源编辑器
使用SQLCMD
需要安装本机客户端,或者至少需要安装SNAC(讨论线程:)来运行SQLCMD
,而不安装整个本机客户端(不过,仍然需要安装SNAC)。我以前没有听说过SNAC,所以这需要一些研究。我假设安装任何东西都会遇到同样的阻力,因此如果您能够克服这种阻力,那么安装本机客户端可能是您的最佳选择
至于经过的时间。您可以使用%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
(仅供参考-我在所有示例中都使用了您的伪代码,因此没有进行任何测试。)您需要首先解决“阻力”:您没有提到有关SQL Server或Windows版本的任何内容,也没有提到为什么不允许使用sqlcmd.exe,但底线是,如果没有客户端库,就无法连接到SQL Server,如果没有某种工具,就无法执行SQL脚本。您可以编写以运行SQL脚本,但这似乎比首先使用sqlcmd.exe毫无意义,风险更大。您需要首先解决“阻力”:您没有提到任何有关您的SQL Server或Windows版本的信息,也没有提到为什么不允许使用sqlcmd.exe,但底线是您不能