8

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

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

任何快速示例如何做到这一点?以前从未做过非常感谢

已编辑

我可以这样做吗?

:On Error exit 

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

我收到一个错误:

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

感谢您的任何意见

4

4 回答 4

6

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

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

有些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 会破坏一个批处理脚本。

于 2010-10-21T19:31:48.443 回答
1

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

于 2010-10-28T16:54:33.640 回答
0

希望这可以帮助你:

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

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

于 2013-12-23T13:02:17.970 回答
-1

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

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

于 2015-11-18T08:35:14.950 回答