【发布时间】:2020-04-17 23:57:26
【问题描述】:
当 SQL 语句中有双引号时,Sybase ASE 上的 flyway migrate 命令返回错误。
Migration R__wes.sql failed
---------------------------
SQL State : 42S22
Error Code : 207
Message : Invalid column name 'C'.
Statement : SELECT count(1) from redemptions WHERE redem_type = "C"
我在 linux 上使用 Flyway 6.3.3 并尝试使用 jConnect 和 jTDS 驱动程序。
简单的解决方案是将双引号替换为单引号。 但是,我有数百个复杂的存储过程需要更新,以便它们可以与 flyway 一起使用。
我错过了什么可以解决这个问题吗?
谢谢, 卫斯理
【问题讨论】:
-
需要用单引号替换。如果这里有某种使用模式,也许有人可以建议一个通用的替代解决方案。
-
我从您的评论中假设 - 我有数百个复杂的存储过程 - 您已经使用双引号值成功运行这些 proc 一段时间了。 . 并且 Flyway 在您的环境中是“新的”,是吗?无论如何,在 ASE 中,如果您发出
set quoted_identifier on(在会话级别),那么您应该能够使用双引号值。我猜你在 Flyway 之前使用的是什么,有一个配置设置可以确保在连接时发出set quoted_identifier on; Flyway 在启动数据库连接时是否有类似的配置/设置? -
马克 - 你的假设是正确的。存储的过程已经在数据库中。 Flyway 将用于将未来的更改迁移到现有的存储过程。
-
Mark - flyway 在迁移之前有回调,我可以将quoted_identifier 设置为关闭。这似乎可以解决问题。之前会进行更多测试。我也发现了这个:github.com/flyway/flyway/issues/1355
-
啊,是的,我误读了这个问题……
set quoted_identifer off(不是on)是正确的设置;无论如何,听起来你已经解决了这个问题......进入下一个:-)