0

几天来我一直在寻找解决方案,但我被困住了。我已经用尽了所有资源,需要解决这个问题。如果有人有想法或知道如何做到这一点,请提供帮助。

我在 Server1 上有一个 SQL Server 数据库。我有一个在 Server2 (ServerName2) 上安装并运行的应用程序,以及一个需要在此服务器上安装的应用程序中运行的过程。

我需要的是在将行插入表时执行批处理文件。SQL Server 数据库位于 Server1 上。批处理文件启动一个应用程序并调用一个脚本,该脚本执行一个过程。该脚本需要在安装在 Server2 上的应用程序中运行。在表上创建插入后我有一个触发器。现在我需要一些如何执行这个批处理文件。请注意,批处理文件调用安装在不同服务器上的程序。

我想到了2个解决方案:

  1. 使用 SQL Server 执行位于 Server2 上的批处理文件。我尝试使用"EXEC xp_cmdshell '\\ServerName2\C:\MSTR SCRIPT FILES\Batch_File_Execute_OTB_Script.bat".
    它返回 2 条记录,第一条“找不到网络名称”。第二个为 NULL。

  2. 创建一个带有到 ServerName2 的连接字符串的批处理文件,即启动 .exe 程序。如果我在 ServerName2 上运行它,我可以获得批处理文件来启动这个程序并运行脚本。

总之,我需要通过 SQL Server 还是通过批处理从 Server1 连接到 Server2?这可能吗?如果是的话,请给我一些指导。
建立连接后,是否需要调用 .exe 程序并运行我的脚本?从远程连接触发这个的命令是什么?

4

1 回答 1

1

这里有一段代码可以帮助您连接到 SQL 服务器并询问 SQL 版本。

@ECHO OFF
SQLCMD /? > nul 2> nul
IF ERRORLEVEL 1 ECHO.SQLCMD not found on this machine & PAUSE & GOTO :eof

SET SQLCmdLine=SQLCMD -b -w400
REM use something like the next line for NT authentication; second line for SQL authentication
REM for NT SET SQLCmdLine=%SQLCmdLine% -E -S "YourServerName"
REM for SA SET SQLCmdLine=%SQLCmdLine% -U "YourSQLUserName" -P "YourSQLPassword" -S "YourServerName"
SET Database=YourDatabaseName


REM I will use NT Authentication for this example
SET SQLCmdLine=%SQLCmdLine% -E -S "(local)"
SET TestSQLCmdLine=%SQLCmdLine% -h-1 -d "%Database%"

REM this will get the SQL version
%TestSQLCmdLine% -Q "SELECT @@VERSION" | FINDSTR /v "rows affected"

REM this will run a SQL script
%TestSQLCmdLine% -i "YourSQLScript.SQL"
PAUSE
于 2013-08-01T17:28:38.077 回答