错误提示:

SELECT 失败,因为下列 SET 选项的设置不正确: 'QUOTED_IDENTIFIER'。请确保 SET 选项正确无误,可以用于 计算列

上的索引视图和/或索引和/或筛选的索引和/或查询通知和/或 XML 数据类型方法和/或空间索引操作。。

错误再现:

--SET QUOTED_IDENTIFIER ON
--GOCREATE PROCEDURE usp_test2
AS
BEGINPRINT 2  --Executing XQuery and XML data modification statements --requires that the connection option QUOTED_IDENTIFIER be ON.--执行xquery和xml数据修改语句,要求连接的QUOTED_IDENTIFIER选项设置为ONSELECT (SELECT ',' + NAMEFROM   (SELECT 'a' AS 'name' UNION SELECT 'b' UNION SELECT 'c') AS aFOR XML PATH(''),TYPE).value('.', 'nvarchar(max)')
END
CREATE PROCEDURE usp_test1
AS
BEGIN  PRINT 1  EXEC usp_test2
END

执行下面的语句再现错误

SET QUOTED_IDENTIFIER ON
EXEC usp_test1

会出现下面的错误:

1
2
消息 1934,级别 16,状态 1,过程 usp_test2,第 6 行
SELECT 失败,因为下列 SET 选项的设置不正确: 'QUOTED_IDENTIFIER'。请确保 SET 选项正确无误,可以用于 计算列上的索引视图和/或索引和/或筛选的索引和/或查询通知和/或 XML 数据类型方法和/或空间索引操作。。

错误原因分析:

因为在执行xml的xquery操作的时候,要求选项QUOTED_IDENTIFIER设置为ON才可以,否则就会报上面的错误;

这里需要注意的是,QUOTED_IDENTIFIER,ANSI_NULLS选项在创建过程或者函数的时候,会附在过程或者函数的对象上,

成为过程或者函数的属性,每次执行的时候会以这样的选项执行过程或者函数。

所以尽管在外部对相关的选项进行了设置,将QUOTED_IDENTIFIER设置成了ON,但是真正执行时也是使用过程或者函数自身存储的属性执行;

要想改变这个设置,只有在定义函数或者过程的时候,在定义的时候在定义函数开始设置好这些选项。

这里查询一个过程或者函数的选项的脚本如下:

-- Get the function name, definition, and relevant properties  SELECT sm.object_id,   OBJECT_NAME(sm.object_id) AS object_name,   o.type,   o.type_desc,   sm.definition,  sm.uses_ansi_nulls,  sm.uses_quoted_identifier,  sm.is_schema_bound,  sm.execute_as_principal_id  -- using the two system tables sys.sql_modules and sys.objects  FROM sys.sql_modules AS sm  JOIN sys.objects AS o ON sm.object_id = o.object_id  -- from the function 'dbo.ufnGetProductDealerPrice'  WHERE sm.object_id = OBJECT_ID('dbo.usp_test2')  ORDER BY o.type;  GO 

执行结果:

可以看到usp_test2的uses_quoted_identifier属性为零,即没有开启,所以会报这个错误;

错误处理

只需要将usp_test2的定义改成下面这样就可以了:

--在这里对过程的quoted_identifier属性进行设置
--这里的设置会跟随过程的每次执行
SET QUOTED_IDENTIFIER ON
GOCREATE PROCEDURE usp_test2
AS
BEGINPRINT 2  --Executing XQuery and XML data modification statements --requires that the connection option QUOTED_IDENTIFIER be ON.--执行xquery和xml数据修改语句,要求连接的QUOTED_IDENTIFIER选项设置为ONSELECT (SELECT ',' + NAMEFROM   (SELECT 'a' AS 'name' UNION SELECT 'b' UNION SELECT 'c') AS aFOR XML PATH(''),TYPE).value('.', 'nvarchar(max)')
END

再次重复执行上面的语句,即便不用set quoted_identifier on 语句也一样可以成功执行,具体如下:

EXEC usp_test1

执行结果如下:

所以综上,在使用xml相关方法时,一定要记得开启set quoted_identifier on选项,如果是过程或者是函数中使用到了,记得在过程和函数的定义处,一定要开启这个选项;

再有,同样的过程或者函数在不同的数据库上可能也会表现出不一样的行为,即一个报错,另一个可能不报;

问题的原因在于,在没有明确设置这个选项的时候,这个选项会用系统预定义的选项,所以,如果在数据库上已经开启的情况下定义了这样的方法或者函数,那么就会不报错,而如果数据库上没有开启,使用上面语法的过程或者函数就会报这个错误了。

SELECT 失败,因为下列 SET 选项的设置不正确: 'QUOTED_IDENTIFIER'。问题处理相关推荐

  1. QUOTED_IDENTIFIER选项设置不正确

    QUOTED_IDENTIFIER选项设置不正确 错误提示 具体操作 结果 错误提示 DELETE 失败,因为下列 SET 选项的设置不正确: 'QUOTED_IDENTIFIER'.请确保 SET ...

  2. 国考省考行测:主旨题结构分析法,总分,分总,分分,分总分,总分总,主旨题错误选项的设置规律

    国考省考行测:主旨题结构分析法,总分,分总,分分,分总分,总分总,主旨题错误选项的设置规律 2022找工作是学历.能力和运气的超强结合体! 公务员特招重点就是专业技能,附带行测和申论,而常规国考省考最 ...

  3. vue 的elementui中select下拉框多选项-multiple属性

    vue的select下拉框多选项-multiple属性 最近在使用vue-element-admin这个后台管理框架开源模板在做一个管理后台,使用起来其实还挺方便的,大部分的组件源码里面都已经写好了, ...

  4. 如何在jQuery的SELECT元素中选择特定选项?

    如果您知道索引,值或文本. 另外,如果您没有直接参考的ID. 这 , 这和这都是有用的答案. 标记示例 <div class="selDiv"><select c ...

  5. Angularjs 中select回显后重复选项的解决

    Angularjs 中select回显后重复选项的解决 (1)Angularjs 中select回显代码,records和categoryValueList都是后台返回的 <!DOCTYPE h ...

  6. html 下拉框字体,怎么把select下拉菜单里的文字设置成左右滚动效果

    原标题:怎么把select下拉菜单里的文字设置成左右滚动效果 希望用marquee标签来设置字体滚动,代码是下面这样写的,但是没有效果,字体还是不会滚动,应该怎么来写,才会实现这个效果呢? " ...

  7. sql SELECT时的with(nolock)选项说明

    2019独角兽企业重金招聘Python工程师标准>>> sql SELECT时的with(nolock)选项说明 要提升SQL的查询效能,一般来说大家会以建立索引(index)为第一 ...

  8. SYN包TCP选项的设置

    一个SYN可能包括这些内容:初始系列号.初始窗口大小.MSS.窗口扩大因子.时间戳. 那么是怎么决定是否设置某个选项,怎样设置的呢?例如窗口扩大因子有关传输的性能,我可以怎么样改动这个值呢? 下面来看 ...

  9. 荣耀十连续点击android版本9,华为荣耀V10开发者选项如何设置

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 系统版本为EMUI10,华为荣耀V10开发者选项的设置步骤是: 1.首先进入荣耀v10手机桌面,点击设置. 2.点击关于手机. 3 ...

最新文章

  1. RAC 修改 DB 实例名 步骤
  2. 大话中文文本分类之textCNN
  3. [JLOI 2011]飞行路线[USACO 09FEB]Revamping Trails
  4. 蓄水池问题c语言编程,蓄水池大作战
  5. Objective C 基础教程
  6. 如何取消Angular rxjs Observable的订阅
  7. 多线程中ThreadLocal的使用
  8. Etl之HiveSql调优(left join where的位置)
  9. ubuntu 如何卸载qt_UBuntu14.04下安装和卸载Qt5.3.1
  10. EasyUI:easyUI中自定义icon
  11. 视频教程-微信小程序开发实战第三季-微信开发
  12. 数字后端概念——padding
  13. JAVA实现时间换算
  14. 小鸟云服务器如何进行远程桌面连接?
  15. 注册微信公众平台测试账号
  16. 55--mvc:annotation-driven标签解析
  17. 身份证识别sdk在生活中的广泛应用
  18. SpringSecurity+Mybatis实现用户自助注册登录(含角色),打造简单安全的注册登录页面。
  19. 《惢客创业日记》2021.01.27-31(周三)顾耀东傻吗?
  20. C#一元一次算法求解

热门文章

  1. 提高开发团队能力 这4点很重要
  2. 随机森林降维matlab,随机森林在高光谱遥感数据中降维与分类的应用
  3. win10链接无线打印服务器,老司机调解win10系统连接无线打印机的方法介绍
  4. 《计算机教育》专题报道:“米老师”其人
  5. HashMap与HashTable
  6. CentOS7 注册系统服务实现服务自启
  7. 关系型数据库三大范式介绍
  8. 手机淘宝移动端接入网关基础架构演进之路
  9. 树链剖分 完全模板(子树查改+树链查改)
  10. 五人斗地主方案(玩法)运营