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

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

我想增强现有的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, 'MyProcess', Now() - StartTime)" -W    
一些问题:

  • 这个bat文件运行的服务器没有SQL工具,我从帖子中看到它确实需要安装(你不能只复制
    sqlcmd.exe
    文件)。这将遇到阻力。是否有其他方法可以从批处理文件执行SQL语句,而无需安装软件

  • 我没有使用BAT文件的经验。是否有人可以提供关于如何获得流程持续时间的指导(例如获取开始时间,并在结束时计算差异)


  • 我可能会尝试使用我更熟悉的另一个工具,但我正在尝试在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,但底线是您不能