2013-08-01 60 views
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程序并运行我的脚本?什么是从远程连接触发这个命令?

+0

我不知道我理解你,都是服务器'SQL Server'吗?如果他们是为什么你不能链接服务器并执行远程过程? –

+0

对不起。两台服务器都在Windows Server 2008上运行。Server1安装了SQL Server。 Server2有我的应用程序,MSTR安装。 – user2642833

+1

在批处理文件中使用SQLCMD。请参阅SQLCMD /?我今天早些时候回答了一个类似的问题,当我回应时,问题被删除了。 NT身份验证或SQL身份验证?回答,我会回复。 – RGuggisberg

回答

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