【问题标题】:How to execute an SQL statement stored in a shell script variable using isql如何使用 isql 执行存储在 shell 脚本变量中的 SQL 语句
【发布时间】:2012-03-07 17:04:44
【问题描述】:

所以,我正在尝试使用 isql 执行存储在 shell 脚本变量中的 SQL 语句

附上通用代码。

SQL="select * from Student"

EMPLOYEES=`isql -U $USERNAME -P $PASSWORD -D $DATABASE -S $SERVER<<EOF
$SQL
go

但是在执行此操作时,我收到一个错误,例如:关键字“Select”附近的语法不正确和“=”附近的 Suntax 不正确

有人知道如何执行直接存储在 isql 变量中的 SQL 查询吗?

【问题讨论】:

  • 您的“此处文档”未关闭(没有带有“EOF”的单行),您的反引号也未关闭。这是您的复制/粘贴错误吗?
  • 好像忘记粘贴EOF了。

标签: shell isql isqlquery


【解决方案1】:

这样试试:

EMPLOYEES=`echo "$SQL" | isql -U $USERNAME -P $PASSWORD -D $DATABASE -S $SERVER`

【讨论】:

  • 谢谢,原来我在提取这些 SQL 语句的文件中使用了双引号。将它们取下并添加 EOF 有效。
【解决方案2】:

根据this page,以下应该可以工作:

   SQL="select * from Student"

   EMPLOYEES=`isql -U $USERNAME -P $PASSWORD -D $DATABASE -S $SERVER<<EOF
   $SQL
   go
   EOF
   `

另请参阅我对您的问题的评论,因为在您发布的代码中,您缺少结束的“EOF”和反引号(每个都在单独的行上)。

您也可以按照@user1254184 在他的回答中建议的那样尝试:

   EMPLOYEES=`echo "$SQL" | isql -U $USERNAME -P $PASSWORD -D $DATABASE -S $SERVER`

最后,要解决引号等潜在问题,您可以使用临时文件:

   echo "$SQL" > $TMP/sql.$$
   EMPLOYEES=`isql -U $USERNAME -P $PASSWORD -D $DATABASE -S $SERVER -i $TMP/sql.$$`
   rm $TMP/sql.$$

您可能想为临时文件选择一个更好的名称。

【讨论】:

  • 很好,这是一个有趣的解决方案
猜你喜欢
  • 1970-01-01
  • 2012-02-18
  • 2018-07-19
  • 2015-09-28
  • 1970-01-01
  • 2010-12-27
  • 1970-01-01
  • 1970-01-01
  • 2021-09-08
相关资源
最近更新 更多