2010-03-01 98 views

回答

6

下面将让你在命令行中,将打印在当前目录下的所有SQL文件和所有子目录的名称开始

for /r %f in (*.sql) do echo %f 

运行。

然后用sqlcmd <connection args> -i%f代替echo %f来执行脚本。

希望这会有所帮助。

+2

一个向下票没有对此有何评论?怎么会这样?说真的,如果你不喜欢我的回答,或者有什么问题,你能告诉我吗?我们都在这里学习。 – 2011-07-11 08:33:43

+0

它对我不起作用 – ob213 2012-05-17 03:47:15

+0

尝试使用不带空格的目录和文件名。 (它可能很方便http://www.den4b.com/?x=downloads&product=renamer) – mbmihura 2013-01-18 17:22:31

0

尝试使用for循环。此命令的选项已演变,我不知道你使用的是什么版本DOS的,但假设DOS包括“从Windows XP cmd.exe”,这样的事情可能工作:

for /r . %f in (*.sql) do @echo %f 

好吧,这将只打印文件的名称。我假设你已经有一个程序,你可以从命令行运行一个 SQL文件,你可以使用它来代替echo

欲了解更多信息,请试试for /?

+0

我得到 “F在这个时候意外” 错误 – ob213 2012-05-17 03:51:57

+0

应该@echo %%˚F – rob 2012-11-01 14:26:39

2
for %f in ("c:\path\to\dir\*.sql") do sqlcmd -S [SERVER_NAME] -d [DATABASE_NAME] -i "%f" -b 
3

在这里,你去。该批处理文件将执行目录及其子目录中的所有sql文件。它还会创建一个带有结果的output.txt文件,以便您可以查看错误和其他内容。关于批处理文件的一些注意事项:

  • [YourDatabase]是要针对脚本执行的数据库的名称。
  • [YourPath]是保存所有脚本的路径。
  • [YOURSERVERNAME \将YourInstanceName]是SQL服务器名和实例名,用“\”
  • 你要替换“=”后面的文本与什么是适合您的服务器
  • 每个变量分离
  • 一定不要把空间围绕“=”
  • 不要把周围[YourPath]任何报价
  • 确认[YourPath]有一个“\”末

    集数据库= [YourDatabase]

    SET ScriptsPath = [YourPath]

    SET ServerInstance = [YOURSERVERNAME \将YourInstanceName]

    IF EXIST “%ScriptsPath%output.txt的” 删除 “%ScriptsPath%output.txt的”

    类型NUL> “%ScriptsPath%output.txt的”

    FOR/R “%ScriptsPath%” %% G IN(* .SQL)DO(

    SQLCMD -d%数据库%-S%ServerInstance%-i“% %G“-o”%% G。txt“

    echo ............................................ .......................................... >>“%ScriptsPath%输出。 TXT”

    回声执行: “%% G” >> “%ScriptsPath%output.txt的”

    回波..................... .................................................. .............. >>“%ScriptsPath%output.txt”

    复制“%ScriptsPath%output.txt”+“%% G.txt”“%ScriptsPath%输出.txt“

    del”%% G.txt“

+0

在'SET's之后添加以下行确保有一个尾部反斜杠:'IF NOT%ScriptsPath:〜-1 %==“\”SET ScriptsPath =%ScriptsPath%\' – 2012-12-20 17:02:39

相关问题