首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sqlcmd模式下指定:r命令的相对路径

在sqlcmd模式下指定:r命令的相对路径
EN

Stack Overflow用户
提问于 2015-07-19 13:35:22
回答 2查看 3K关注 0票数 2

A)假设你有四个.sql文件(script1.sql,script2.sql,script3.sql,script4.sql ) in,比如说在一个文件夹c:\scripts中。

B)创建一个包含以下内容的主脚本文件(Main.sql),请注意,我已经给出了脚本的相对路径。

代码语言:javascript
复制
:r script1.sql
:r script2.sql
:r script3.sql
:r script4.sql

Main.sql保存在c:\scripts itself中。

C)创建一个名为"ExecuteScripts.bat“的批处理文件,其内容如下:-

代码语言:javascript
复制
SQLCMD -E -d<YourDatabaseName> -ic:\Scripts\Main.sql
PAUSE

当我运行批处理文件时,它无法执行脚本1.sql文件。当我给出完整的路径C:\scripts\script1.sql时,它工作得很好,但我不想在这里硬编码路径。

使用sqlcmd可以实现这一点吗?

EN

回答 2

Stack Overflow用户

发布于 2015-07-20 02:15:18

代码语言:javascript
复制
@echo off
pushd "c:\scripts"
SQLCMD -E -d<YourDatabaseName> -iMain.sql
popd
PAUSE

或者,如果所有sql脚本都与批处理脚本位于同一文件夹中,则:

代码语言:javascript
复制
@echo off
pushd "%~dp0"
SQLCMD -E -d<YourDatabaseName> -iMain.sql
popd
PAUSE

最新版本允许您的脚本正常运行,无论它们驻留在何处。

票数 3
EN

Stack Overflow用户

发布于 2015-07-19 21:47:28

如果使用完整的路径,但动态创建文件Main.sql呢?

批处理文件,需要在批处理文件的文件夹中创建4个脚本文件,并在那里创建Main.sql

代码语言:javascript
复制
@echo off
set "BatchFolder=%~dp0"
(   echo :r %BatchFolder%script1.sql
    echo :r %BatchFolder%script2.sql
    echo :r %BatchFolder%script3.sql
    echo :r %BatchFolder%script4.sql
)>"%BatchFolder%Main.sql"
sqlcmd.exe -E -d "YourDatabaseName" -i "%BatchFolder%Main.sql"
set "BatchFolder="
pause

打开命令提示符窗口并在那里运行call /?。此命令的帮助将在解释%~dp0的窗口中输出,这意味着参数0的驱动器和路径以反斜杠结尾,不带引号。运行批处理文件时的参数0是批处理文件的名称。

在命令提示符窗口中运行set /?时,会显示命令set的帮助信息,并在上一个帮助页面中列出一些在运行批处理文件时动态定义的特殊环境变量。第一个列出的是%CD%,它表示当前目录。

因此,除了使用批处理文件文件夹之外,还可以在批处理执行时使用当前文件夹。

代码语言:javascript
复制
@echo off
set "CurrentFolder=%CD%\"
(   echo :r %CurrentFolder%script1.sql
    echo :r %CurrentFolder%script2.sql
    echo :r %CurrentFolder%script3.sql
    echo :r %CurrentFolder%script4.sql
)>"%CurrentFolder%Main.sql"
sqlcmd.exe -E -d "YourDatabaseName" -i "%CurrentFolder%Main.sql"
set "CurrentFolder="
pause

%CD%引用的文件夹路径不像%~dp0返回的文件夹路径那样以反斜杠结尾,这是在第二行的%CD%之后使用反斜杠的原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31498316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档