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

예를 들어 셸을 사용하는 경우 bash파일을 연결하고 단일 엔터티로 파이프할 수 있습니다.

sqlcmd -S SQLDEV14 -E -d D7stage -i <(cd Modules && cat "${files[@]}") -m 1

관련 정보