【问题标题】:Error executing Ant sql task with Sybase使用 Sybase 执行 Ant sql 任务时出错
【发布时间】:2016-12-21 23:55:08
【问题描述】:

我编写了一个构建文件,它在某些时候将对象安装到 Sybase 数据库中。

代码由我们的开发人员提供,我不允许修改它。 如果使用isql 命令手动运行给定的SQL,它可以工作。

这是安装给定对象的构建文件的一部分:

<sql
    driver="${db.driver}" url="${db.url}" userid="${db.user}"
    password="${db.password}" src="${file}"
    print="true" delimiter="go" delimitertype="row"
    classpathref="sybase.lib.path" output="${file}.out"
    errorproperty="install.failed" onerror="continue" keepformat="true" />

虽然该解决方案在大多数情况下都有效,但每次我尝试运行包含双引号 (") 的脚本时都会失败。

例如,如果 SQL 脚本包含如下内容:

declare @var varchar(30)
set @var = "SOME STRINGS"

它失败并出现错误:

[sql] com.sybase.jdbc3.jdbc.SybSQLException: Invalid column name 'SOME STRINGS'.

有人解决了这个问题吗?

我已阅读Ant sql task 的文档。 我使用的是 Ant 1.8.2 版。

我已经使用以下 jdbc 驱动程序进行了测试:

  • com.sybase.jdbc3.jdbc.SybDriver
  • net.sourceforge.jtds.jdbc.Driver

【问题讨论】:

  • 您可以尝试将 escapeprocessing 设置为 false
  • @Matteo 我试过了,我得到了同样的错误。
  • 最后我用SQL task标签替换了下面的语句:
  • 我很想知道答案是否有帮助!

标签: sql ant sybase


【解决方案1】:

当会话建立时,它的设置 QUOTED_IDENTIFIER 默认设置为 true。我相信你可以通过服务器设置来调整它,但无论如何,你可以通过将它附加到 url 来设置会话:

?SQLINITSTRING=set quoted_identifier off

所以网址可能看起来像:

"jdbc:sybase:Tds:<server>:<port>/<db>?SQLINITSTRING=set quoted_identifier off"

如果您有多个设置,请使用 & 符号 &amp; 加入它们。见also

quoted_identifier

确定 Adaptive Server 是否识别 双引号内的分隔标识符。默认, quoted_identifier 已关闭,所有标识符必须:

  • 符合有效标识符的规则。

  • 用括号括起来。

如果您使用 setquoted_identifier on,双引号的行为 方括号的方式,您可以使用表、视图和列名称 以非字母字符开头,包括将 否则不允许,或者是保留字,通过封闭 双引号内的标识符。分隔标识符 不能超过28字节,可能不是所有前端都能识别 产品,并在用作参数时可能会产生意想不到的结果 到系统程序。

当quoted_identifier 开启时,包含在其中的所有字符串 双引号被视为标识符。使用单引号 字符或二进制字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 2011-02-07
    • 1970-01-01
    • 2011-04-23
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多