在 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")
我的任务是用 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")