SQL SERVER的联机丛书的解释:
“当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔。当 SET QUOTED_IDENTIFIER 为 OFF 时,标识符不可加引号,且必须遵守所有 Transact-SQL 标识符规则。”

先说说什么是标识符,举个例子,如果创建了一个叫做USER的数据库表,则直接用SQL语句“SELECT * FROM USER”做查询时会报错:“在关键字 'USER' 附近有语法错误。”,也就是USER被视作SQL SERVER的关键字处理了,而不是被认为是一个表或视图。但如果修改为“SELECT * FROM [USER]”就没问题了。此处的方括号就是标识符。标识符的作用就是告诉数据库引擎,此处是一个数据库对象(比如是一个表、视图、存储过程等),而不是一个关键字。

在SQL SERVER中,方括号是标识符,但不仅仅是方括号可以做标识符。在特定的情况下,双引号也可以做标识符,也就是前面的sql语句可以修改为“SELECT * FROM "USER"”,而这个特定的情况也就是SET QUOTED_IDENTIFIER ON的情况下。当SET QUOTED_IDENTIFIER值为ON时,双引号内的字符被当作是数据库对象。而在其值为OFF时,双引号被解释为字符串的边界,和单引号的作用是类似的。比如如下几组SQL 语句都是正确的(假设USER表有一个U_NAME的varchar型的字段)

SET QUOTED_IDENTIFIER ON
SELECT * FROM "USER" WHERE U_NAME='netasp'

SET QUOTED_IDENTIFIER ON
SELECT * FROM [USER] WHERE U_NAME='netasp'

SET QUOTED_IDENTIFIER OFF
SELECT * FROM [USER] WHERE U_NAME="netasp"

SET QUOTED_IDENTIFIER OFF
SELECT * FROM [USER] WHERE U_NAME='netasp'

现在剩下最后一个小问题了,SQL SERVER联机丛书说OFF是SET QUOTED_IDENTIFIER的默认值,那如果我们省略掉SET QUOTED_IDENTIFIER语句和写了SET QUOTED_IDENTIFIER OFF应该效果一致才对,但事实证明省略掉SET QUOTED_IDENTIFIER语句和SET QUOTED_IDENTIFIER ON语句才是一致的,这又是为什么呢?原来在默认情况下,连接到 SQL Server 时,ODBC 和 OLE DB 客户端发出连接级 SET 语句,将 QUOTED_IDENTIFIER 设置为 ON。而连接级设置(使用 SET 语句设置)会替代 QUOTED_IDENTIFIER 的默认数据库设置。原来如此!!!

关于SET QUOTED_IDENTIFIER {ON|OFF}的问题的更多相关文章

  1. QUOTED_IDENTIFIER 选项对 index 的影响

    在修改或创建Index时,有时会收到一些Error Message,指明Set options设置错误,最常见的选项是:SET QUOTED_IDENTIFIER 选项 当创建或修改的index包含c ...

  2. ANSI_NULLS和QUOTED_IDENTIFIER

    这些是 SQL-92 设置语句,使 SQL Server 2000/2005 遵从 SQL-92 规则. 当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必 ...

  3. SET QUOTED_IDENTIFIER ON和SET ANSI_NULLS ON

    distinct是sqlserver的标识符,如果想以distinct为表时,在QUOTED_IDENTIFIER为off的情况下,是不能创建表名为distinct的表的,因为在QUOTED_IDEN ...

  4. SQL 存储过程中QUOTED_IDENTIFIER on/off

    http://huihai.iteye.com/blog/1005144 在存储过程中经常会有 SET QUOTED_IDENTIFIER on SET QUOTED_IDENTIFIER off S ...

  5. ANSI_NULLS、QUOTED_IDENTIFIER

    数据库服务器重启后,游戏登录提示“您输入的用户名不存在,请重新注册!”重启前特意登录过平台,基本操作都正常.这之间并没对数据库做任何修改,怀疑是应用程序服务端的问题.开启跟踪监控登录过程,只跟踪到一个 ...

  6. set QUOTED_IDENTIFIER ON事故记录

    作业执行失败: 看了一下执行脚本 delete  top(8000) from "interface"."完成" where  loggid in( selec ...

  7. sql Server中SET QUOTED_IDENTIFIER的使用

    在存储过程中经常会有 Sql代码   SET QUOTED_IDENTIFIER on SET QUOTED_IDENTIFIER off 这样的语句,那么SET QUOTED_IDENTIFIER到 ...

  8. ANSI_NULLS 和 QUOTED_IDENTIFIER

    1  ANSI_NULLS 当 SET ANSI_NULLS 为 ON 时,对空值进行等于 (=) 或不等于 (<>) 比较时取值为 FALSE    例如:SELECT * from t ...

  9. SET QUOTED_IDENTIFIER ON

    语法  SET QUOTED_IDENTIFIER { ON | OFF }    注释  当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔 ...

  10. SET QUOTED_IDENTIFIER OFF语句的作用

    先看下面几个sql语句  1 SET QUOTED_IDENTIFIER ON 2 SELECT * FROM "USER"    WHERE a='netasp'  3  4 S ...

随机推荐

  1. 关于PID控制的一点资料搜集

    CMU做的控制教程 <动态系统的反馈控制> MATLAB&Simulink的PID控制(官方)

  2. 树莓派使用root操作图形界面使用自带的文件管理器

    使用pi用户通过VNC登录图形界面之后,在需要修改一些文件则时提示权限不够, 命令行下使用sudo 运行就可以了.或者直接用root账户. 修改管理员密码:sudo passwd root 修改启用管 ...

  3. 项目Beta冲刺(团队)--2/7

    课程名称:软件工程1916|W(福州大学) 作业要求:项目Beta冲刺 团队名称:葫芦娃队 作业目标:进行新一轮的项目冲刺,尽力完成并完善项目 团队博客 队员学号 队员昵称 博客地址 04160242 ...

  4. 利用requests库访问网站

    1.关于requests库 函数 Response对象包含服务器返回的所有信息,也包含请求的Request信息. 访问百度二十次 import requests def getHTMLText(url ...

  5. wordpress列表分页添加Numeric数字分页

    wordpress分类页的分页导航默认是上一页下一页,有时我们想让它显示数字分页要如何操作呢?大多数想着是安装一个插件就可以解决了,作为一位喜欢研究的开发者自然就会用代码来实现了,下面随着ytkah一 ...

  6. 记录:http协议+response+request+session+cookie

    1.http协议 http协议也叫作超文本传输协议,定义了浏览器向怎样向服务器请求资源和服务器怎样将资源传给浏览器.http协议是面向事务的应用层协议,是万维网能够传递资源的可靠保障. 目前http协 ...

  7. [Java] Spring boot 的 SrpingSecurity 框架搭建

    参考: SrpingSecurity]之一:框架搭建https://blog.csdn.net/qq_28296925/article/details/82021092 [SpringSecurity ...

  8. 洛谷 P1396

    P1396 传送门 扯些题外话 讲真的我刚看到这个题的时候真的傻fufu的..... 大体题意 找出从s走到t的拥挤度最大值最小.. 思路 说最大值最小可能就会有dalao开始二分了. 想我这种的蒟蒻 ...

  9. 如何高效的阅读uni-app框架?(建议收藏)

    作者 | Jeskson来源 | 达达前端小酒馆 uni-app的框架,配置:page.json,manifest.json,package.json,vue.config.js.脚本,应用程序,ma ...

  10. uni app 零基础小白到项目实战2

    <template> <scroll-view v-for="(card, index) in list" :key="index"> ...