此 Bash 脚本执行files
数据库上数组中的每个文件。但是,它会为每个文件创建一个新的 sqlcmd 会话。有没有办法在循环之前创建单个 sqlcmd 会话,然后使用该会话执行所有文件?
#!/bin/bash
# declare and initialize an array of files to be executed (listed in sequence of execution)
declare -a files=(
'0140_Items.sql'
'0170_Warehouses.sql'
'0190_ItemsAtWarehouses.sql'
)
# loop through files array to execute each file on database
for file in "${files[@]}"
do
sqlcmd -S SQLDEV14 -E -d D7stage -i ".\Modules\\$file" -m 1
done
如果是这样,语法是什么?我已经在博客和论坛中搜索了如何执行此操作,但没有找到任何有用的信息。
答案1
我最终这样做了:
# loop through files array and build a string of comma separated input files in variable called inputFiles
for file in "${files[@]}"
do
inputFiles+=".\Modules\\$file"
done
# echo $inputFiles
# execute multiple input files on database using one sqlcmd session
sqlcmd -S SQLDEV14 -E -d D7stage -i $inputFiles -m 1
答案2
如果您使用的是 shell,例如bash
您可以连接文件并将它们作为单个实体通过管道传输:
sqlcmd -S SQLDEV14 -E -d D7stage -i <(cd Modules && cat "${files[@]}") -m 1