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