You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过批处理全局设置-I(QUOTED_IDENTIFIER ON)?有哪些负面影响?

全局设置QUOTED_IDENTIFIER=ON的可行性及负面影响分析

能否全局设置QUOTED_IDENTIFIER=ON?

可以通过以下几种方式实现全局层面的默认设置:

  • 实例级全局生效:给SQL Server实例添加启动参数-I,重启实例后,所有新建立的数据库连接默认QUOTED_IDENTIFIER为ON。
  • 数据库级默认设置:执行ALTER DATABASE [目标数据库名] SET QUOTED_IDENTIFIER ON;,后续在该数据库内创建的新连接会自动继承这个设置,无需逐个脚本修改。
  • 登录级默认配置:针对特定登录账户修改默认会话属性,不过这种方式覆盖范围有限,适合局部场景。

全局设置后的负面影响场景

  • 依赖双引号作为字符串常量的脚本:若原有脚本习惯用双引号包裹字符串(例如SELECT * FROM orders WHERE status = "completed"),当QUOTED_IDENTIFIER=ON时,双引号会被解析为对象名(列名、表名等),直接导致脚本报错“找不到对象”。
  • 旧存储过程/触发器的兼容性问题:SQL Server中存储过程、触发器等对象的QUOTED_IDENTIFIER设置是创建时固化的,旧对象本身执行不受全局默认影响,但如果调用这些对象的脚本依赖会话级的OFF设置,或显式修改会话设置的逻辑被全局默认覆盖,可能引发执行异常。
  • 第三方工具/老旧应用适配问题:部分老旧ETL工具、自定义应用会默认将QUOTED_IDENTIFIER设为OFF,全局设置ON后,这些工具生成的SQL语句会因语法解析规则变化而执行失败。
  • 动态SQL执行异常:如果动态SQL代码中用双引号拼接字符串内容,全局ON后双引号会被识别为对象标识符,导致动态SQL无法正确解析执行。
  • 特定数据库对象的修改/重建失败:若数据库中存在依赖QUOTED_IDENTIFIER=OFF创建的计算列、约束等对象,全局设置ON后,修改或重建这些对象时会因不符合设置要求而失败。

内容的提问来源于stack exchange,提问作者user3510083

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 04:13:19