标识符、分隔标识符、保留关键字、字符串、通配符、转义符

来源:互联网 发布:人工智能第一龙头股 编辑:程序博客网 时间:2024/06/05 16:22

几个概念:

A、标识符:是数据库对象的名称。

数据库对象的名称被看成是该对象的标识符。Microsoft® SQL Server™ 中的每一内容都可带有标识符。服务器、数据库和数据库对象(例如表、视图、列、索引、触发器、过程、约束、规则等)都有标识符。大多数对象要求带有标识符,但对有些对象(如约束)标识符是可选项。

B、保留关键字:是sql语言的语法。属于代码的范畴。

保留关键字是用来定义、操作和访问数据库。保留关键字是 SQL Server 使用的 Transact-SQL 语言语法的一部分,用于分析和理解 Transact-SQL 语句和批处理。尽管在 Transact-SQL 脚本中,使用 SQL Server 保留关键字作为标识符和对象名在语法上是可行的,但规定只能使用分隔标识符。

C、字符串:数据类型的一种,数据类型有整数型、字符串型等。属于数据的范畴。

每个列、局部变量、表达式和参数都有一个相关的数据类型。即属于某种数据类型。

D、通配符、转义符:这2个是跟字符串相关的概念。一般出现在字符串中。

比如 like ’dsd%‘ , dsd% 是字符串。%是通配符。这个语句的含义大家应该都知道,^_^。

使用转义符,可以把通配符改变成普通字符。2种方法:

1、[]是默认的转义符,里面的通配符(里面只能是通配符),都当做普通字符处理:

like   ’dsd[%]‘,这时,%就是个普通字符了,查找条件就是要某个字段值完全等于 dsd%   。

2、用ESCAPE关键字定义转义符,

like   ’dsd/%‘    ESCAPE ’/'    效果同 like   ’dsd[%]‘

还有一种转义符情况:

大家知道,单引号一般可用来包含字符串,如果字符串中有单引号是普通字符,那么就同时有了2种意思的单引号,怎么区分呢?就要用2个单引号来转义为普通字符,如 like ‘ds''d’ ,其实就是指字符串:ds'd

后面提到的QUOTENAME函数,默认是用[]来做分隔符,如果字符串中有[],函数转换后,字符串中的[]就要用两个]]来转义,表明这个[]是个普通字符,与字符串前后的分隔符 [] 相区别。

步入正题,

标识符,分为:

一、常规标识符:符合常规标识符规则的标识符。

常规标识符规则如下:(参考sqlserver的联机帮助)

1、。。。。。

2、。。。。。

3、。。。。。

4、。。。。。

二、分隔标识符:包含在双引号 " 或者方括号 [ ] 内的标识符就是分隔标识符。

注意:双引号 " 或者方括号 [ ] 是分隔符。

在 Transact-SQL 语句中,对不符合常规标识符规则的标识符必须用双引号或方括号来分隔。符合标识符格式规则的标识符可以分隔,也可以不分隔。

1、当QUOTED_IDENTIFIER 为 ON 时,默认是on的。 SQL Server 遵循 SQL-92 规则:

双引号只能用于分隔标识符,不能用于分隔字符串。
为保持与现有应用程序的兼容性,SQL Server 并不完全强制该规则。如果字符串没有超过标识符的长度,则该字符串可包含在双引号内。但不建议这样做。

单引号必须用来包含字符串,不能用于分隔标识符。
如果字符串包含单引号,则需要在单引号前再增加一个单引号:

SELECT * FROM "My Table"
WHERE "Last Name" = 'O''Brien'
注意:"Last Name",你可以写成'Last Name'而不会报语法错误,是因为,sql认为是进行字符串的比较了,比如写成'Last Name'='Last Name',比较结果为真,表中的全部记录就被select出来了。而如果写成:WHERE "Last Name" = "O''Brien",即等号右边改成双引号,则会把O''Brien当成一个标识符(数据库对象),即当成一个字段名,运行时,会提示没有O''Brien列。 2、当 QUOTED_IDENTIFIER 为 OFF 时,对于双引号和单引号的使用,SQL Server 遵循如下规则:

引号不能用于分隔标识符,而是用括号作为分隔符。
单引号或双引号可用于包含字符串。
如果使用双引号,嵌入的单引号不需要用两个单引号来表示:

SELECT * FROM [My Table]
WHERE [Last Name] = "O'Brien"
常规标识符和分隔标识符包含的字符数必须在 1 到 128 之间

 

另外:

将标识符用作参数:(具体请参考联机帮助)

许多系统存储过程、函数和 DBCC 语句都把对象名当作参数。其中一些参数接受多部分对象名,另一些则只接受单部分名称。接受单部分对象名称还是多部分对象名称决定了 SQL Server 在内部如何分析和使用参数。 。。。。。。。

另外:

QUOTENAME函数:

msdn解释:返回带有分隔符的 Unicode 字符串,分隔符的加入可使输入的字符串成为有效的 Microsoft® SQL Server™ 分隔标识符。

以下示例接受字符串 abc[]def 并使用 [ 和 ] 字符来创建有效的 SQL Server 分隔标识符:

SELECT QUOTENAME('abc[]def')
下面是结果集:

[abc[]]def]

(1 row(s) affected)
注意,字符串"abc[]def"中的右括号有两个,用于表示转义符,转换成普通字符,与分隔符 [] 相区别。

解释:字符串 abc[]def 中的[]是当做普通字符,所以用 ] ] 来表示 ] 是个普通字符,即表明中间的 [] 就是个普通字符。

如果是:SELECT QUOTENAME('abc[]def' , '()' ) ,不用[]来做分隔符,那么结果是:

(abc[]def) ,就不用两个]] 来转义了,因为新的字符串中只有一种意思的[],即普通字符。

这是个通用的规则,比如字符串中含有单引号 ' 为普通字符串时,比如 :ds'd   ,

like 语句就要改成:like ‘ds‘’d’,而不是: like 'ds'd' 。即2个单引号表示转义符,转换成普通单引号字符 '   。

 

转载:http://blog.csdn.net/daishaodong/archive/2010/03/09/5362030.aspx

原创粉丝点击