如何在 Bash 脚本中使用单个 sqlcmd 会话

如何在 Bash 脚本中使用单个 sqlcmd 会话

此 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

相关内容