我有一个批处理文件,它运行多个SQLCMD命令,这些命令运行外部SQL脚本文件提供的查询。脚本本身相当简单,但我被运行批处理所需的所有文件依赖性所困扰。我一直在谷歌搜索如何将所有这些文件链接在一起,没有运气。
我是否可以应用任何技术将批处理脚本和SQL脚本封装在单个文件中,以便我可以将生成的文件移动到其他计算机而不拖动单个sql文件?为了组织/可读性/信息隐藏,我真的更愿意避免将sql直接嵌入批处理文件中。
答案 0 :(得分:2)
考虑使用7-Zip。它是免费的here
您可以将所有BAT文件和SQL命令封装到这样的zip中:
C:\> 7za a -t7z archive.7z *.BAT *.SQL
然后你可以像这样提取:
C:\> 7z e archive.7z
或者你也可以使用它来制作一个自解压缩的可执行文件 - 当你到达另一台服务器时,你不需要任何工具来提取它,但是你可能无法通过电子邮件发送它。顺便说一句,如果您将命令更改为以下命令,Windows可以本机读取存档本身,因此您无需随身携带文件来安装提取软件:
C:\> 7za a -tzip archive.zip *.BAT *.SQL
或者您可以使用将在任何地方出现的Microsoft CAB工具documentation。
如果你想将*.BAT
和*.CMD
收集到" 内阁"叫BATplusSQL.cab
:
dir /b *.BAT *.CMD >files.txt
makecab /d "CabinetName1=BATplusSQL.cab" /f files.txt
del /q /f files.txt
答案 1 :(得分:0)
这是我的意思的一个例子。
创建一个文本文件,每行一个SQL查询,类似于:
My Queries
Select * from table1 where something = somethingelse
Select * from table2
delete from table3
update table1 set something=nothing
确保第一行不是查询。它可以是其他任何东西。根据需要调整%sql%中的设置。
运行以下批处理文件:
@echo off
setlocal
set "sql=sqlcmd -S MySERVER -E -q "
set cnt=1
for /f "tokens=* skip=%cnt%" %%a in (sqlQueries.txt) do (
echo %sql% "%%a"
set /a cnt+=1
)
删除echo以运行查询。