【问题标题】:INSERT failed because the following SET options have incorrect settings: 'QUOTED_IDENTIFIER'INSERT 失败,因为以下 SET 选项的设置不正确:'QUOTED_IDENTIFIER'
【发布时间】:2017-03-22 02:06:54
【问题描述】:

我们有时在执行存储过程时收到以下消息,之后没有任何更改删除并重新执行存储过程它工作正常。

DBCORE INSERT 失败,因为以下 SET 选项的设置不正确:“QUOTED_IDENTIFIER”。验证 SET 选项是否适用于索引视图和/或计算列上的索引和/或过滤索引和/或查询通知和/或 XML 数据类型方法和/或空间索引操作。

请帮助我们理解这一点。

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    QUOTED_IDENTIFIER 是一个“粘性”选项,因此在创建过程时生效的设置在运行时使用。由于未对过程进行任何更改,因此错误表明存储过程是使用 QUOTED_IDENTIFIER OFF 创建的,并且创建/删除了错误消息中提到的类型之一的索引。

    QUOTED_IDENTIFIER ONANSI_NULLS ON 的会话中重新创建或更改存储过程,以避免出现问题。

    【讨论】:

      【解决方案2】:

      我遇到了这个问题,所以我在 MS SQL 中将所有作业步骤创建到存储过程中。使用模板时,它自动具有以下内容

      GO
      SET QUOTED_IDENTIFIER ON
      GO
      SET ANSI_NULLS ON
      

      【讨论】:

        【解决方案3】:

        就我而言,在批量模式下加载存储过程时,我必须在 sqlcmd.exe 命令行中添加 -I 参数。

        【讨论】:

        • SQLCMD 默认为QUOTED_IDENTIFIER OFF 以实现向后兼容性,因此当执行的脚本在创建存储过程之前不包含QUOTED_IDENTIFIER ON 时,需要-I 选项。
        • 我的 bcp 版本没有 -I,但添加 -q 就可以了
        • 天哪,谢谢,我找了好几天了
        【解决方案4】:

        如果有人在通过 Visual Studio 数据库项目部署后遇到此错误,则值得检查存储过程文件的属性。如果设置为 Project Default,则转到数据库项目的属性 > Project Settings,然后单击 Database Setting 按钮。

        您可以将这两个值(和其他值)默认打开,如下面的屏幕截图所示。

        这只会在您对程序进行更改时解决问题;架构比较和后续更新不会更改存储过程中的QUOTED_IDENTIFIER,除非过程主体发生更改。它将防止问题在后续更新的架构上再次发生。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-20
          • 1970-01-01
          • 1970-01-01
          • 2012-01-13
          • 2014-03-07
          • 1970-01-01
          相关资源
          最近更新 更多