在 sqlcmd 中使用 bash 变量

Using a bash variables in sqlcmd

我的任务是用 sqlcmd 替换很多 bash 脚本中的 ISQL。 ISQL 允许在其执行过程中传递一个变量。 一个例子是:

    SQL_STATEMENT="SELECT TOP 1 SYS_USER_NAME FROM SYS_USER"
    echo $SQL_STATEMENT | isql -b -d, $DSN $DBUID $DBPWD >> setupdb_test.txt

据我所知,这在 sqlcmd 中不可行。我怎样才能做到这一点? sqlcmd 必须使用哪些标志才能允许这种情况发生?

这是我尝试过的并且取得了不错的结果,但我真的不想在每次运行特定脚本时都创建文件 sql_command.sql:

    echo "SELECT TOP 1 SYS_USER_NAME FROM SYS_USER" > sql_command.sql
    sqlcmd -S $DB -U $DBUID -P $DBPWD -d $DSN -i sql_command.sql >> setupdb_test.txt

源自 Windows 的程序可能对它们如何处理 non-regular 文件很挑剔,我没有机会进行测试,但您可以尝试使用典型的 Unix 技巧来提供 "file" 数据来自 echo.

或者/dev/stdin:

echo "SELECT TOP 1 SYS_USER_NAME FROM SYS_USER" | sqlcmd -S "$DB" -U "$DBUID" -P "$DBPWD" -d "$DSN" -i /dev/stdin

或进程替换:

sqlcmd -S "$DB" -U "$DBUID" -P "$DBPWD" -d "$DSN" -i <(echo "SELECT TOP 1 SYS_USER_NAME FROM SYS_USER")