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

使 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);
GO

SET QUOTED_IDENTIFIER ON;
GO

-- Will succeed.
CREATE TABLE "select" ("identity" INT IDENTITY NOT NULL, "order" INT NOT NULL);
GO

SELECT "identity","order"
FROM "select"
ORDER BY "order";
GO

DROP TABLE "SELECT";
GO

SET QUOTED_IDENTIFIER OFF;
GO

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

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

  复制代码
SET QUOTED_IDENTIFIER OFF;
GO
USE AdventureWorks2008R2;
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
      WHERE 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");
GO

SET 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;
GO

DROP TABLE dbo.Test;
GO

SET 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

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

时间: 2024-08-29 11:07:49

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

SQL Server 重新初始化系统数据库中的单引号问题

在最近的数据库跨机房迁移中,由于硬件的限制,需要滚动式地将数据库一台台迁移到新机房,先在新机房搭建一个新环境,将数据迁移过去,再将旧机房的机器下架搬到新机房,重新配置后用于下一轮的升级,重新配置过程中,有以下几个问题: 1:由于机房和IP已经发生变化,因此需要按照命名规则修改服务器名称. 2:原数据库上的数据如登录账号/作业/链接服务器等等需要删除 3:部分服务器因磁盘变动,仅保留系统盘,部分SQL Server文件(如果系统数据库文件)已经丢失 对于问题1和问题2,可以进行手动删除或者写个脚本

SQL语句中条件里需要有单引号问题

经常写SQL语句条件中会有两个单引号,但是本身又被单引号包括, 如select * from control where column=' '  如果column中的条件为exec usp_Data '{0}' 那这个就不好办了,就这样拿进去sql语句就报语法错误. 那么解决的方法就是在column的条件中用两个单引号来表示一个单引号... 这样问题就解决了 如下: select * from control where column=' exec usp_Data ''{0}'''

log4j写数据库存在单引号问题

项目中要求把日志信息写到文件的同时也把其写入数据库中, log4j.properties版本log4j-1.2.17, 配置如下 log4j.rootLogger=INFO,wjc,wjf,wjj #common log4j.appender.wjc.Encoding=GB2312 log4j.appender.wjc=org.apache.log4j.ConsoleAppender log4j.appender.wjc.layout=org.apache.log4j.PatternLayout

数据库笔记:字符串单引号转义新方法

从Oracle 10g R1开始,数据库允许用另一个引用符号来代替单引号.当字符串中包含大量单引号时(如 I'm in Xi'an). 以前的表达方式如下: SQL>SELECT * FROM T WHERE ADDR='I''m in Xi''an'; 新表达方法如下: SQL>SELECT * FROM T WHERE ADDR=q'( I'm in Xi'an)';

php 单引号 双引号 ,php字符串/ hmtl / 数据库显示/ 及php的几个转化函数

* 以单引号为定界符的php字符串,支持两个转义\'和\\* 以双引号为定界符的php字符串,支持下列转义(\'会直接输出\' ,也会转义 \\):    \n 换行(LF 或 ASCII 字符 0x0A(10))     \r 回车(CR 或 ASCII 字符 0x0D(13))     \t 水平制表符(HT 或 ASCII 字符 0x09(9))     \\ 反斜线     \$ 美元符号     \" 双引号     \[0-7]{1,3}               此正则表达式序列

mysql单引号和双引号

表名,列名最好用`(esc下面那个,不用`会出错) 这就要从双引号和单引号的作用讲起:双引号里面的字段会经过编译器解释然后再当作HTML代码输出,但是单引号里面的不需要解释,直接输出.例如:$abc='I love u';echo $abc //结果是:I love uecho '$abc' //结果是:$abcecho "$abc" //结果是:I love u所以在对数据库里面的SQL语句赋值的时候也要用在双引号里面SQL="select a,b,c from ...&q

SQL语句中有关单引号、双引号和加号的问题

字符串数据是用单引号包在外面的,而+号只是用来连接这些字符串的. 数据库里的字段是整型的时候不要加单引号,是字符串的时候要加,其它类型根据实际情况来,双引号就是用来拼接字符串的,单引号是sql文的固有写法,因为你要动态的来拼接,涉及到变量,所以要用"+"来组合各个字符串片段.最终结果无非就是得出能在数据库查询分析器中执行的sql文. String sql = "insert into student values ( " + student.getId() + &q

单引号中有双引号,双引号还需要引号怎么办

单引号中有双引号,双引号还需要引号怎么办     今天,我在做一个日历控件时,发现在拼接HTML中的input时,出现引号里还有引号:     '<input type="button" onclick="findSearch("MU")"'/>     结果,火狐浏览器出现"死机"现象.     将findSearch中的双引号改为单引号,结果出现报错提示:     后来将findSearch中的双引号利用转义字

ASP,VB,JAVASCRIPT 拼HTML时多层单引号双引号嵌套用法,实用(转载)

s.html中的单引号.双引号及其转义使用(转) 收藏   在js中对相关字符做判断或取值,或者拼HTML赋值的时候很多情况下都会用到这些,也是我刚刚遇到的问题,通过参考下面的这篇文章,一切都解决了,摘抄下来做个笔记!呵呵... ------ 在一个网页中的按钮,写onclick事件的处理代码,不小心写成如下:<input value="Test" type="button" onclick="alert(""OK"&q