SET QUOTED_IDENTIFIER ON

SET QUOTED_IDENTIFIER ON

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表有一个a的varchar型的字段)

SET QUOTED_IDENTIFIER ON

SELECT * FROM “USER”  WHERE a=’netasp’

 

SET QUOTED_IDENTIFIER ON

SELECT * FROM [USER] WHERE a=’netasp’

SET QUOTED_IDENTIFIER OFF

SELECT * FROM [USER]  WHERE a=”netasp”

SET QUOTED_IDENTIFIER OFF

SELECT * FROM [USER]  WHERE a= ‘ 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
的默认数据库设置。原来如此!!!

相关文章