在 sqlcmd 中使用 bash 变量



我的任务是用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 的程序可能对如何处理非常规文件很挑剔,我没有机会进行测试,但您可以尝试典型的 Unix 技巧来提供包含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")

最新更新