SQLServer安装后从批处理文件运行SQLCMD

时间:2013-11-26 16:33:39

标签: batch-file cmd sqlcmd

我遇到了一个奇怪的问题,我确信这个问题很容易解释和解决。

我正在使用.bat文件来安装很多程序,其中一个是SQL Server 2012(如果重要的话,其他安装只是.net框架,OPOS驱动程序和使用SQL服务器的POS软件)。

我可以让批处理文件以静默方式安装所有东西,包括SQL(带SSMS),这很棒。但是一旦安装了SQL Server,我就想运行几个SQL脚本来创建/附加数据库。

我知道安装有效(如果我不尝试除安装之外的任何东西),我知道SQLCMD可以工作(如果我在安装后单独运行它),但是如果我尝试运行SQLCMD在安装之后,在同一个批处理文件中,它失败并且标准'SQLCMD不被识别为内部或外部命令......'

我已经把它归结为我需要重新启动CMD才能让它识别新命令(即SQLCMD),所以我想我将SQLCMD命令拆分成一个单独的批处理文件并调用它,但是它仍然无法正常工作。在CMD.exe获取新命令之前,我必须关闭原始批处理文件。

那么......是否可以'刷新'cmd.exe,以便新安装的SQLCMD命令可以从原始批处理文件中使用?

这是(部分)我的脚本。 (请注意,我已经删除了SQL Server之前的所有其他安装程序)

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

"%~dp0SQLServer.exe" /QS /INDICATEPROGRESS /ACTION=install /FEATURES=SQL,SSMS /INSTANCENAME=Datasym /SECURITYMODE=SQL /SAPWD=Welcome21ST /IACCEPTSQLSERVERLICENSETERMS
echo.
echo SQL Server installed

sqlcmd -S %computername%\DATASYM -U sa -P Welcome21ST -i %script%

%script%变量发生变化(就像我说的,我想运行多个脚本)。而且我知道脚本本身也可以工作。

为什么CMD不能将SQLCMD识别为命令?

我试图替换这一行:

sqlcmd -S %computername%\DATASYM -U sa -P Welcome21ST -i %script%

call sqlscript.bat

因为我认为会打开另一个CMD,exe(它会这样),所以我假设第二个CMD会看到e​​w命令(SQLCMD),但它似乎没有。

有关如何让SQLCMD在原始批处理文件中工作的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

正如您已经发现的那样,当前的CMD窗口不会获取对系统PATH环境变量的新更改。如果由于某种原因你不想把完整的路径放到sqlcmd(我认为这是最好的解决方案),你可能会尝试这样做。

start /wait cmd /c sqlcmd -S %computername%\DATASYM -U sa -P Welcome21ST -i %script%

这将生成一个新窗口并等待sqlcmd调用完成后再返回原始脚本。