linux - 如何迭代 bash sqlcmd 输出

标签 linux bash sqlcmd

我在 linux bash 中有一个 SQLCMD,我正在获取 SELECT 的结果,我如何遍历每一行,并能够挑选出特定的列,以便我可以使用它们来运行 bash 命令

我目前做一个 SELECT 并输出到 csv 文件,它工作正常,但我宁愿找到一种不导出的方式,因为权限正在发挥作用,我需要使用一个脚本完全运行

#!/bin/bash

sqlcmd -S DB_string -d DB -U USERNAME -P PASSWORD -Q \
"SET NOCOUNT ON SELECT * FROM dbo.microiopenvpn WHERE mode='create' ORDER BY id" -o "sqloutputCheckCreate.csv" -W -w 1024 -s"," -h-1
line_no=0
file=sqloutputCheckCreate.csv
line_no=$(awk '{x++} END {print x}' $file)
echo $line_no

#rowCount= sqloutputCheckCreate.csv | wc -l

if [ $line_no > 0 ]; then
    echo "SQL Has Entries"
    while IFS="," read -r d1 d2 d3 d4 d5 d6; do

      if [ -e "/etc/openvpn/clients/$d6.ovpn" ]; then
            echo "$d6 File exists"
            sqlcmd -S DB_string -d DB -U USERNAME -P PASSWORD -Q \ -Q "SET NOCOUNT ON UPDATE dbo.microiopenvpn SET mode='valid' WHERE id='$d1'" < /dev$                echo "Database Updated - Successfully"
      else
            echo "$d6 does not exist - Action Creation Script of $d6"
            ./executecreate.sh
      fi

    done < sqloutputCheckCreate.csv    
 else
    echo "Nothing there"
  fi

cp /dev/null sqloutputCheckCreate.csv

以上内容在导出到外部 csav 文件时有效,但我需要将 sql 导出到变量中并对其进行循环 - 所以没有外部 - 想法?

最佳答案

类似于:

sqlcmd ... | while IFS="," read -r d1 d2 d3 d4 d5 d6
do
    :# stuff
done

或者,或者:

while IFS="," read -r d1 d2 d3 d4 d5 d6
do
    :# stuff
done < <(sqlcmd ...)

关于linux - 如何迭代 bash sqlcmd 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56728643/

相关文章:

git - 检查 git repo 中是否存在分支而不进行克隆

sql-server - 无法通过 sqlcmd 连接到 LocalDB

linux - 如何对文本文件进行数字排序,然后将结果存储在同一个文本文件中?

linux - Bash:在for循环中重复数组

Linux内核错误?创建新套接字默认为非阻塞

bash - bash 字符串操作替代是什么?

java - 如何从一行中仅读取特定数量的字节/字符并转到下一行?

python - 当 Python 脚本运行并以 sys.exit(0) 结束时出现错误 : exited with status 2

SQLCMD 模式 - 'S' 附近的语法不正确

sql - 如何在Powershell脚本传入的SQL脚本中使用变量