同一 .bat 文件中的 SQL 安装和 sqlcmd 问题

Posted

技术标签:

【中文标题】同一 .bat 文件中的 SQL 安装和 sqlcmd 问题【英文标题】:Issue with SQL install and sqlcmd in same .bat file 【发布时间】:2013-09-25 15:26:01 【问题描述】:

我正在尝试使用单个 .bat 文件来: 1) 在 Windows 7 Professional 64 位机器上从 SQLEXPR_x64_ENU.exe 安装 SQL Server 2008 R2 Express,并且 2) 安装完成后运行一些 .sql 脚本。

如果 sqlcmd 从运行安装的同一 .bat 文件运行,则 sqlcmd 失败并出现以下错误:“'sqlcmd' 不被识别为内部或外部命令、可运行程序或批处理文件。”

如果安装和 .sql 脚本是从单独的 .bat 文件运行的,那么我没有问题(所以我知道问题不在于 sqlcmd 语法)。我尝试使用单个 .bat 并在新窗口中运行 sqlcmd 命令(start cmd /c "sqlcmd ...")并从原始 .bat 文件中调用包含 sqlcmd 命令的第二个 .bat 文件( \filepath\file.bat) 但在每种情况下都会出现相同的错误。

我不希望用户必须启动多个 .bat 文件,因为这会引发以错误顺序运行 .bat 文件、运行一个而不运行另一个等问题。

我的两个问题是:

    有人知道为什么会这样吗? 是否有只涉及启动单个 .bat 文件的解决方案?

【问题讨论】:

【参考方案1】:

恐怕我不能 100% 确定这个问题,我还不能将它添加到评论中,所以我必须把它放在这里。

1.有人知道为什么会这样吗?

我想这是因为当您安装 SQL Server 时,它会将特定路径添加到 Windows 环境变量。由于批处理脚本用于安装 SQL Server 版本,我猜它不会刷新 Windows 环境变量,这意味着 C:\Program Files\Microsoft SQL Server\100\Tools\Binn\ 中包含的 SQLCMD.exe 文件(或者无论你在哪里安装它都不会被缓存)。

2.有没有只启动一个.bat文件的解决方案?

如果您每次都将其安装到默认位置,例如 C:\Program Files\Microsoft SQL Server。然后你也许可以直接从那里启动 SQLCMD。即

C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.exe -q 等....

您可能值得为该路径创建一个变量以使其更容易。

我不知道批处理脚本中刷新或查找新 Windows 环境变量的过程,但我认为这可能是原因。

【讨论】:

我将尝试指定完整的文件路径,然后提供更新。谢谢。 指定完整的文件路径确实可以解决问题。我会赞成这个作为答案,但我没有足够的声誉点。再次感谢您。

以上是关于同一 .bat 文件中的 SQL 安装和 sqlcmd 问题的主要内容,如果未能解决你的问题,请参考以下文章

sqlc源码分析

一键安装JDK

bat 拷贝同一名称文件夹下所有文件?

solution for db2 SQL0805N NULLID.SQLC2G13 missing

一键执行指定路径下的 sql 文件

.bat 文件中的错误处理