使 SQL Server 遵从关于引号分隔标识符和文字字符串的 ISO 规则。由双引号分隔的标识符可以是 Transact-SQL 保留关键字,也可以包含 Transact-SQL 标识符语法约定通常不允许的字符。

Transact-SQL 语法约定

语法

 
SET QUOTED_IDENTIFIER { ON | OFF }

注释

当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔。当 SET QUOTED_IDENTIFIER 为 OFF 时,标识符不可加引号,且必须符合所有 Transact-SQL 标识符规则。有关详细信息,请参阅标识符。文字可以由单引号或双引号分隔。

当 SET QUOTED_IDENTIFIER 为 ON(默认值)时,由双引号分隔的所有字符串都被解释为对象标识符。因此,加引号的标识符不必符合 Transact-SQL 标识符规则。它们可以是保留关键字,并且可以包含 Transact-SQL 标识符中通常不允许的字符。不能使用双引号分隔文字字符串表达式,而必须用单引号括住文字字符串。如果单引号 (') 是文字字符串的一部分,则可以由两个单引号 (") 表示。当对数据库中的对象名使用保留关键字时,SET QUOTED_IDENTIFIER 必须为 ON。

当 SET QUOTED_IDENTIFIER 为 OFF 时,表达式中的文字字符串可以由单引号或双引号分隔。如果文字字符串由双引号分隔,则可以在字符串中包含嵌入式单引号,如省略号。

当在计算列或索引视图上创建或更改索引时,SET QUOTED_IDENTIFIER 必须为 ON。如果 SET QUOTED_IDENTIFIER 为 OFF,则计算列或索引视图上带索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 语句将失败。有关计算列的索引视图和索引所必需的 SET 选项设置的详细信息,请参阅 SET (Transact-SQL) 中的“使用 SET 语句时的注意事项”。

在进行连接时,SQL Server Native Client ODBC 驱动程序和 SQL Server Native Client OLE DB Provider for SQL Server 自动将 QUOTED_IDENTIFIER 设置为 ON。这可以在 ODBC 数据源、ODBC 连接特性或 OLE DB 连接属性中进行配置。对来自 DB-Library 应用程序的连接,SET QUOTED_IDENTIFIER 默认设置为 OFF。

创建表时,即使此时将 QUOTED IDENTIFIER 选项设置为 OFF,该选项在表的元数据中仍始终存储为 ON。

创建存储过程时,将捕获 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 设置,并用于该存储过程的后续调用。

在存储过程内执行 SET QUOTED_IDENTIFIER 时,其设置不更改。

当 SET ANSI_DEFAULTS 为 ON 时,将启用 SET QUOTED_IDENTIFIER。

SET QUOTED_IDENTIFIER 还与 ALTER DATABASE 的 QUOTED_IDENTIFER 设置相对应。有关数据库设置的详细信息,请参阅 ALTER DATABASE (Transact-SQL) 和设置数据库选项。

SET QUOTED_IDENTIFIER 是在分析时进行设置的。在分析时进行设置意味着:SET 语句只要出现在批处理或存储过程中即生效,与代码执行实际上是否到达该点无关;并且 SET 语句在任何语句执行之前生效。

权限

要求具有 public 角色的成员身份。

示例

A. 使用加引号的标识符设置和保留字对象名

以下示例显示 SET QUOTED_IDENTIFIER 设置必须为 ON,而且表名内的关键字必须在双引号内,才能创建和使用具有保留关键字名称的对象。

  复制代码
SET QUOTED_IDENTIFIER OFF
GO
-- An attempt to create a table with a reserved keyword as a name
-- should fail.
CREATE TABLE "select" ("identity" INT IDENTITY NOT NULL, "order" INT NOT NULL);
GOSET QUOTED_IDENTIFIER ON;
GO-- Will succeed.
CREATE TABLE "select" ("identity" INT IDENTITY NOT NULL, "order" INT NOT NULL);
GOSELECT "identity","order"
FROM "select"
ORDER BY "order";
GODROP TABLE "SELECT";
GOSET QUOTED_IDENTIFIER OFF;
GO

B. 使用加单引号和双引号的标识符设置

以下示例显示将 SET QUOTED_IDENTIFIER 设置为 ONOFF 时,在字符串表达式中使用单引号和双引号的方式。

  复制代码
SET QUOTED_IDENTIFIER OFF;
GO
USE AdventureWorks2008R2;
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLESWHERE TABLE_NAME = 'Test')DROP TABLE dbo.Test;
GO
USE AdventureWorks2008R2;
CREATE TABLE dbo.Test (ID INT, String VARCHAR(30)) ;
GO-- Literal strings can be in single or double quotation marks.
INSERT INTO dbo.Test VALUES (1, "'Text in single quotes'");
INSERT INTO dbo.Test VALUES (2, '''Text in single quotes''');
INSERT INTO dbo.Test VALUES (3, 'Text with 2 '''' single quotes');
INSERT INTO dbo.Test VALUES (4, '"Text in double quotes"');
INSERT INTO dbo.Test VALUES (5, """Text in double quotes""");
INSERT INTO dbo.Test VALUES (6, "Text with 2 """" double quotes");
GOSET QUOTED_IDENTIFIER ON;
GO-- Strings inside double quotation marks are now treated
-- as object names, so they cannot be used for literals.
INSERT INTO dbo."Test" VALUES (7, 'Text with a single '' quote');
GO-- Object identifiers do not have to be in double quotation marks
-- if they are not reserved keywords.
SELECT ID, String
FROM dbo.Test;
GODROP TABLE dbo.Test;
GOSET QUOTED_IDENTIFIER OFF;
GO

下面是结果集:

ID String

----------- ------------------------------

1 'Text in single quotes'

2 'Text in single quotes'

3 Text with 2 '' single quotes

4 "Text in double quotes"

5 "Text in double quotes"

6 Text with 2 "" double quotes

7 Text with a single ' quote

转载于:https://www.cnblogs.com/Sabre/p/3852354.html

原来数据库里的单引号是这么加进去的相关推荐

  1. python举两种字符串引号的例子_python里的单引号和双引号的有什么作用

    在Python当中表达字符串既可以使用单引号,也可以使用双引号,那两者有什么区别吗? python单引号和双引号的区别 简单来说,在Python中使用单引号或双引号是没有区别的,都可以用来表示一个字符 ...

  2. Python将数据插入到数据库时遇到单引号插入错误的问题

    这才是真正的解决方法,真不知道有些人连试都没试过就乱转载 比如你要插入一个字符串,是一个变量 如:str = "I'am a handsom boy" 由于这个字符串包含',插入数 ...

  3. mysql必须加单引号吗_mysql加单引号和不加单引号的性能比较

    刚刚我们说过了,生活中难免会有一些不如意,比如,我们用一个字符串类型的字段来作为主键,表面上,这太不如意了,然而,事实也证明这是有用的.问题也就出来了,当在查询语句中对该字段值加上单引号和不加查询耗时 ...

  4. MySQL数据库与Oracle数据库中建表使用单引号和双引号的效果

    一.Oracle数据库,使用单引号和双引号,以及不使用引号的区别 1.不使用引号,创建一个新表 -- 如果不使用引号,则表名和字段会自动转换成大写 create table Tatoo_Test(Na ...

  5. PHP 单引号与双引号的区别(总结)

    看好多代码有时候用单引号或双引号实现包含字符串的内容,其实简单个概括下双引号中的变量可以解析,单引号就是绝对的字符串. 1.定义字符串  在PHP中,字符串的定义可以使用单引号,也可以使用双引号.但是 ...

  6. 解决文本搜索框输入中文出现单引号报错问题

    索引 为什么会出现单引号 出现错误报错 视图XAML代码 后台C#代码 原因 解决方法: 为什么会出现单引号 拼音中单引号作为拼音字节的分隔符出现当你输入的声母超过一个,系统会认为你是输入了两个中文符 ...

  7. java 中的单引号报错_shell中的单引号,双引号,反引号

    docker的父镜像中定义了一个环境变量,我们的镜像在启动命令中需要用到这个环境变量.但是不加双引号时总是报错,报找不到java的启动类,加上双引号就不报错了. 父镜像中定义的变量:$xxx_CMD ...

  8. Python 单引号、双引号和三引号混用时一定要注意!!!

    Python 单引号.双引号和三引号混用时一定要注意!!! 写在前面 一.都是正则表达式惹 二.在代码中理解吧(很简单的,看看就知道了) (1)单引号 (2)双引号 (3)三单引号和三双引号 三.总结 ...

  9. sql 单引号_三种数据库的 SQL 注入详解

    SQL 注入原理 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用 ...

最新文章

  1. css让image不改变大小_变压器怎样改变电压的?
  2. javascript常用验证大全
  3. 分析 H.265 + AAC 的 FLV 文件
  4. 关联查询一张小表。对性能有影响吗(mysql)
  5. 通过极简模拟框架让你了解ASP.NET Core MVC框架的设计与实现[中篇]:请求响应
  6. Spring Boot集成Redis,这个坑把我害惨了!
  7. 55 FI配置-财务会计-固定资产-主数据-定义4-字符评估组
  8. oppo手机维语字体_老年人上网困难重重?学会OPPO这几个功能无后顾之忧
  9. 图解VS2010打包全过程(转)
  10. 2018计算机二级c知识,2018全国计算机二级考试C语言常考知识点归纳
  11. 带你动手编程的强化学习著作,每行代码都是它的温柔!
  12. 控制台应用程序《石头剪刀布》——新手,
  13. 360安全卫士加速球误关闭某个应用软件
  14. c语言科学计数法输出1_e10,PAT 1024科学计数法的代码实现及错误分析(C语言)
  15. html做新浪体育,新浪体育台看不了怎么办?新浪体育台网页版加载失败的解决方法介绍...
  16. 如何开启系统打印机服务器,[两种方法]win7系统的打印机服务如何启动?
  17. 苏州大学NLP团队文本生成预训练方向招收研究生/博士生(含直博生)
  18. 程序员想兼职赚钱?这几个渠道你一定要知道?
  19. 安装sql server走过的弯路,收集了一些安装sql遇到的问题
  20. java在天猫获取图片_怎么获取天猫商品主图图片?

热门文章

  1. 透明色的rgb值是多少_一文掌握PPT主题色原理及使用技巧
  2. 15天掌握Al声纹识别,同盾开启智能风控建模赛训
  3. 安装计算机主板应注意,组装计算机并仅更换主板时要注意的事项
  4. html5中秋博饼,2020年中秋博饼优秀作文(精选5篇)
  5. php fpm 内存增加,不断增加php-fpm的内存使用量?
  6. HTTP的缺点与HTTPS
  7. R2: 相关系数、复相关系数及半偏相关系数之间的联系
  8. android中Intent的一些用法和总结
  9. LTE学习:RV(冗余版本)
  10. 写一个案例,搞得不要不要的。尴尬了。