我编写了一个构建文件,在某些时候会在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驱动程序进行了测试:
答案 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打开时,所有字符串都包含在其中 双引号被视为标识符。使用单引号 字符或二进制字符串。