【问题标题】:QUOTED_IDENTIFIER is set off in some stored procedures when migrating 800+ stored procedures using Flyway使用 Flyway 迁移 800 多个存储过程时,在某些存储过程中设置了 QUOTED_IDENTIFIER
【发布时间】:2016-11-06 14:10:45
【问题描述】:

我正在使用 Flyway 为我的 SQL Server 2014 数据库进行数据库版本控制。我有 800 多个存储过程。

在初始迁移中,对于大约 394 个存储过程,QUOTED_IDENTIFIER 设置为 OFF。但是当我单独迁移它时,将它作为唯一的存储过程,然后QUOTED_IDENTIFIER 设置为ON

QUOTED_IDENTIFIER 的默认值始终为ON

我尝试在JTDS 连接字符串中设置QUOTED_IDENTIFIER 值(QUOTED_IDENTIFIER=ON)但没有用。

有什么解决方法吗?

【问题讨论】:

    标签: sql-server flyway jtds


    【解决方案1】:

    Quoted_IdentifierAnsi_Nulls 以及其他一些讨厌的属性是“粘性的”。 Quoted_Identifier 的当前状态(在会话中)控制在创建新引入的过程或函数时“坚持”什么。有些工具更好,有些工具更糟糕的是,将要插入的设置就在create procedurecreate function 语句之前。当您查看数据库中的源代码时,您可能会也可能不会看到生成的语句...取决于您使用的工具。

    这些属性被捕获到sys.sql_modules 中,它具有源文本和uses_ansi_nullsuses_quoted_identifier 的状态以及其他粘性属性。您可以使用这些标志了解如何在过程和/或函数之前编写任何语句。

    【讨论】:

    • 我想知道为什么属性Quoted_Identifier 设置为OFF 仅用于某些存储过程。例如,如果我执行 46 个存储过程,其中的 6 个过程 Quoted_Identifier 属性设置为 OFF。如果没有将值专门设置为OFF,我们可以在创建过程中为存储过程将Quoted_Identifier 值设置为ON 吗?
    • 如果您没有在每个create procedure 语句之前调用set quoted_identifier on,那么该过程将从当前连接设置继承。这些设置通常被不同的人“感染”(重新)创建程序,而不关心这些粘性属性。如果有人运行alter procedure,它也会在那个时候选择环境设置。
    猜你喜欢
    • 2013-03-27
    • 2016-08-10
    • 1970-01-01
    • 2021-09-24
    • 2014-08-06
    • 2019-03-02
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    相关资源
    最近更新 更多