使用Sybase执行Ant sql任务时出错

时间:2012-06-20 13:11:13

标签: sql ant sybase

我编写了一个构建文件,在某些时候会在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

1 个答案:

答案 0 :(得分:0)

会话建立后,默认情况下设置QUOTED_IDENTIFIER设置为true。我相信您可以使用服务器设置进行调整,但无论如何,您可以通过将此附加到网址来设置是否为会话:

?SQLINITSTRING=set quoted_identifier off

所以网址可能看起来像:

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

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

  

<强> QUOTED_IDENTIFIER

     

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

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

  •   
  • 括在括号内。

  •   
     

如果使用set quoted_identifier,则双引号表现为   方括号,你可以使用表,视图和列名称   以非字母字符开头,包括会出现的字符   不得以其他方式被允许,或者是保留字,通过附上   双引号内的标识符。定界标识符   不能超过28个字节,可能无法被所有前端识别   产品,用作参数时可能会产生意外结果   系统程序。

     

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