【问题标题】:Need help to write bat file that execute sql scripts in (sql server 2008 and another 3 files.?需要帮助编写执行 sql 脚本的 bat 文件(sql server 2008 和另外 3 个文件。?
【发布时间】:2011-04-17 05:33:03
【问题描述】:

我确信这些之前已经被问过,但找不到明确的说明如何创建 批处理文件让我们称之为“更新数据库”这个批处理文件应该

执行位于不同文件夹中的 sql 脚本 执行另外 3 个 bat 文件。

任何简单的例子如何做到这一点?以前从未做过 非常感谢

已编辑

我可以这样做吗?

:On Error exit 

:r C:\myPath\MasterUpdateDatabase.bat
GO 
SQLCMD -S (Local) -i C:\myPath\InsertUsername.sql

我收到一个错误:

“GO”不被识别为内部外部命令

感谢您的任何意见

【问题讨论】:

  • 您是在告诉我们您执行了什么以及错误,而不是您如何执行它
  • 看起来您将批处理脚本视为 SQL 查询。语法完全不同。 ":r" 是你的函数,它只调用批处理文件。 “GO”是不必要的。您可能有一种更简洁的方法来创建一些错误处理和调用多个命令。从批处理文件调用中,您可能希望使用“START /WAIT”,这样您的原始批处理文件不会在您从其中调用的文件之前完成。您可以发布更多详细信息吗?

标签: sql sql-server tsql sqlcmd


【解决方案1】:

您似乎正在尝试使用 DOS 命令创建一个批处理文件,该文件要么 (a) 执行其他批处理文件,要么 (b) 执行 SQLCMD 以运行 sql 或 sql 脚本。

这里有几个例子全部合二为一。我正在使用带有/WAIT 开关的DOS 命令START,这将使您原来的“主”批处理文件在一个窗口中运行,并在新窗口中执行后续文件或命令。该新窗口会一直打开,直到脚本完成并退出。

一些ECHOs 可能不是必需的,但脚本现在会稍微回复您。

@echo off

所以,从某种意义上说,这非常简单,您只是在运行脚本。如果您的 script1.bat 有断点,您可以将错误返回到主脚本并立即结束。我不清楚这是否是您需要主脚本来做的事情。

echo Starting Database Update.
echo.

echo Excuting Script 1
echo.
start /wait C:\path\to\your\script1.bat

echo If there was a problem, break here.
Pause

echo Excuting Script 2
echo.
start /wait C:\path\to\your\script2.bat

echo If there was a problem, break here.
Pause

这里是使用相同的 START /WAIT 运行 SQLCMD 的地方,在这种情况下,它只返回查询的结果。这里要注意的一件事是-Q(大写)运行查询并退出。如果您使用-q(小写),它将运行查询并在 SQLCMD 中打开等待另一个查询。

echo.
echo Running SQLCMD: "select top 100 * from sys.objects"
start /wait sqlcmd -S (local) -Q "select top 100 * from sys.objects"

这就是运行 sql 脚本的方式,这就是 -i 所表示的,但我也没有像之前那样在 START /WAIT 中运行它。不是你必须这样做,但我想展示这两个例子。这还表明,如果您的脚本返回错误,-b 将结束批处理,这在您运行多个依赖于前者成功的脚本时很有用。

echo.
echo Running SQLCMD from an (-i)nput file:
sqlcmd -S (local) -i  C:\path\to\your\script.sql -b

echo.
echo Update Complete.
pause

End

所以,我假设您正在寻找使用 SQLCMD 的 .bat 或 .cmd 文件。我提供的示例非常基本,但希望它能让您走上正确的道路。

哦!记住 CTRL+C 会中断一个批处理脚本。

【讨论】:

    【解决方案2】:

    您看到的实际错误是命令行解释器无法识别“GO”,因此您可以删除该行。

    【讨论】:

      【解决方案3】:

      希望对你有帮助:

      sqlplus UserName/Password@DataBase @C:\myPath\InsertUsername.sql
      

      P.S : 不要忘记添加命令“commit;”在 sql 文件 (InsertUsername.sql) 的末尾,此命令命令 Oracle 将执行的更改保存在 darabase 中

      【讨论】:

        【解决方案4】:

        这个答案绝对适合您的目的:

        sqlcmd -S localhost -U fdmsusr -P fdmsamho -i "E:\brantst\BranchAtt.sql" -o "E:\brantst\branchlog.txt"

        【讨论】:

        • 你的回答与提问者已经尝试过的有什么不同?
        • 你宁愿解释为什么你的回答会解决他的问题
        猜你喜欢
        • 2013-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多