我能够使用 freeTSD 和命令行通过 Mint Linux VM 连接到 Microsoft SQL Server 2008 实例以在其上执行 sql 语句。现在我想在 bash 脚本中自动执行此操作。我能够在我的 bash 脚本中成功登录:
TDSVER=8.0 tsql -H servername -p 1433 -D dbadmin -U domain\\Administrator -P password
然后我有我的 SQL 查询:
USE dbname GO delete from schema.tableA where ID > 5 GO delete from schema.tableB where ID > 5 GO delete from schema.tableC where ID > 5 GO exit
这在通过 freetsd 命令行手动执行时有效,但在我放入 bash 文件时无效。我关注了这篇文章:freeTSD & bash .
这是我的 bash 脚本示例:
echo "USE dbname GO delete from schema.tableA where userid > 5 go delete from schema.tableB where userid > 5 go delete from schema.tableC where ID > 5 GO exit" > tempfile | TDSVER=8.0 tsql -H servername -p 1433 -D dbname -U domain\\Administrator -P password < tempfile
bash 脚本的输出是:
locale is "en_US.UTF-8"
locale charset is "UTF-8"
Default database being set to sbdb
1> 2> 3> 4> 5> 6> 7> 8>
然后执行脚本的其余部分。
有人可以一步一步地回答我的问题吗?
最佳答案
我完全不确定您的示例如何工作。
这是我的 bash 脚本示例:
echo "USE dbname .... exit" > tempfile | TDSVER=8.0 tsql -H servername -p 1433 -D dbname -U domain\\Administrator -P password < tempfile
# ------------------------------------^^^^ ---- pipe char?
尝试使用“;”字符。
echo "USE dbname .... exit" > tempfile ; TDSVER=8.0 tsql -H servername -p 1433 -D dbname -U domain\\Administrator -P password < tempfile
# ------------------------------------^^^^ ---- semi-colon
更好的是,使用 shell 的“here documents”。
TDSVER=8.0 tsql -H servername -p 1433 -D dbname -U domain\\Administrator -P password <<EOS
USE dbname
GO
delete from schema.tableA where userid > 5
go
delete from schema.tableB where userid > 5
go
delete from schema.tableC where ID > 5
GO
exit
EOS
IHTH.
当前命令行输入:
echo "delete from table where userid > 5
go
delete from table where userid > 5
go
delete from table where ID > 5
GO
exit" < /tmp/tempfile; TDSDUMP=/tmp/freetds.log TDSVER=8.0 tsql -H servername -p 1433 -D dbname -U Administrator -P password <<EOS
关于linux - freeTDS bash : Executing sql queries in Microsoft SQL server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13096018/