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 的默认数据库设置。原来如此!!!

最新文章

  1. 遍历 Input检测是否有重复的值
  2. SpringCloud Sleuth 使用
  3. python函数,lambda表达式,三目运算,列表解析,递归
  4. Visual Studio 2013 各版本注册码
  5. poj 1287 Networking【最小生成树prime】
  6. ASP.NET 2.0服务器控件开发的基本概念(转载)
  7. jquery serialize的使用
  8. UI和UE有什么区别呢?
  9. 图形绘制中的PorterDuffXfermode
  10. tensorflow的基本认识
  11. Connection 对象简介 方法解读 JDBC简介(四)
  12. cpu读取指令时读取的长度
  13. SlidingMenu第三篇 --- SlidingMenu使用介绍
  14. centos7初上手3-安装apache服务
  15. django中邮件、日志的配置
  16. MySQL(十四)管理维护及性能优化
  17. df
  18. mysql中文编码问题
  19. MySQL把文件导入表中
  20. springcloud超时时间与重试次数配置

热门文章

  1. dart 中的 try on catch
  2. 2018牛客网暑期ACM多校训练营(第一场)F:Sum of Maximum
  3. c#接口interface学习
  4. python - django 将图片路径地址转换成 InMemoryUploadedFile 并存储数据库
  5. Ansible自动部署lnmp架构+上线电商
  6. 使用docker部署微服务
  7. 51 Nod 1135 原根
  8. linux下 调试C#代码
  9. navicat提示无法连接解决办法
  10. 「HNOI2015」亚瑟王