我需要将数据输入到 bsqldb。
我计划使用以下命令将数据从 bash 脚本中传递到 bsqldb:
/usr/bin/bsqldb -S servername -U username -P password <<< ${VARIABLE}
$VARIABLE 将包含以这种方式组织的数据:
USE databasename
customsqlfunction ('param1','param2','param3','param4','param5')
customsqlfunction ('param1','param2','param3','param4','param5')
customsqlfunction ('param1','param2','param3','param4','param5')
customsqlfunction ('param1','param2','param3','param4','param5')
我连接到的sql服务器是MSSQL 2008,它似乎正在运行TDS v 7.1(这看起来很奇怪......到处阅读2008应该是7.2,但tds工具一直说它正在将协议降级到7.1我连接...但这是另一个问题)
答案1
我设法测试了这一点并弄清楚了。
以下是构建将发送到 bsqldb 的变量中包含的数据的正确方法:
MyVariable="select @@servername"$'\n'"select @@language"$'\n'"select @@version"
正如您所看到的,发送到 bsqldb 的每个 sql 命令都必须位于单独的行上。这就是 \n 出现的地方,它代表“换行”或“换行”字符。例如,其余的“select @@servername”是实际的 SQL 命令。
这是当我从上面输入 $MyVariable 时 bsqldb 将看到的内容:
select @@servername
select @@language
select @@version
通常您需要发送 GO 命令来执行一系列或批量命令,但作为Freetds 用户指南指出在第 6 章 使用 Freetds最后一批发送到bsqldb的命令不需要后面跟GO来执行,它会自动运行。我还确认,在 cmd 列表的末尾,与 tsql 相反,不需要 EXIT 命令来关闭与服务器的连接。一旦到达命令列表的末尾,它就会自动退出。
现在我们已经弄清楚了变量,我们可以使用以下语法从 bash 脚本中将其提供给 bsqldb:
/usr/bin/bsqldb -S servername -U username -P password <<< $MyVariable
享受。