SQL Server 2008 R2 Express在安装后是否需要重新启动计算机?

时间:2011-07-19 02:14:31

标签: sql deployment setup-deployment

我有一个引导程序链接以下组件的安装:

SQL Server 2008 R2 - >数据库初始化批处理文件 - >产品MSI

使用Configuration.INI文件以静默方式安装SQL Server。没问题。

问题出在数据库初始化批处理文件中。批处理文件调用两个OSQL命令,为其提供一个.SQL文件(通过-i标志),用于数据库删除和数据库创建。

当我在调用OSQL后立即回显%ERRORLEVEL%时,错误级别 9009 。我已经谷歌了,但没有有意义的结果。

我在SQL 2008安装后重新启动服务(MSSQL $ SQLExpress)以确保。

这是奇怪的部分。如果我在运行引导程序之前运行SQL Server 2008安装,它可以正常工作。我没有做任何特别的事情,我只是安装它(没有重启等)。

此外,如果计算机中已安装SQL 2008,则引导程序将跳过SQL 2008的安装并直接进入数据库初始化。在这种情况下,DB将成功初始化。

有关如何进行的任何建议?

修改

进一步研究后,我发现了这个:

  

命令解释器(命令提示符)在a时设置ERRORLEVEL 9009   批量尝试执行未找到的程序。

那么,为什么没有找到SQLCMD?顺便说一下,我在批处理文件中调用SQLCMD命令,如下所示:

SQLCMD -S <> -E -I <>

1 个答案:

答案 0 :(得分:1)

最后,问题在于,当一个进程产生时,环境变量的副本会被“加载”。如果在任何时候更改了此环境变量的值,则不会更新加载到进程的“副本”。

就我而言,安装SQL安装程序时,它会将其bin路径附加到%PATH%变量:

C:\ Program Files \ Microsoft SQL Server \ 100 \ Tools \ Binn \

但是,在引导程序中加载的%PATH%的值没有此路径,这就是批处理文件在调用“sqlcmd”时返回错误级别9009(程序未找到)的原因。

要解决这个问题,我需要在每个组件安装开始之前以某种方式“刷新”%PATH%环境变量的值。我用这段代码做了这个:

    internal static void RefreshEnvironmentVariable(string variable)
    {
        string latestMachineValue = Environment.GetEnvironmentVariable(variable, EnvironmentVariableTarget.Machine);

        Environment.SetEnvironmentVariable(variable, latestMachineValue, EnvironmentVariableTarget.Process);
    }