SQL语法 分隔符理解

 

 

单引号和双引号之间的区别最早在SQL92标准中引入的。对于标识符,这个标准区分了常规标识符和分隔的标识符。两者主要的区别在于:分隔的标识符被括在双引号中(Transact-SQL也支持方括号的使用:[标识符])并且是区分大小写的。单引号只用于字符串的定界。总的来说,引入分隔的标识符是为了对标识符进行规范,否则就会与保留字相同了。特别要提到的是,分隔的标识符能够使你在命名(标识符或变量的名字)的时候,免于使用在将来的SQL标准中可能出现的保留字。另外,分隔的标识符能够包含一些在通常的标识符名称中被视为不合法的字符,如空格。  
 
SQL   SERVER中,双引号的使用由SET   语句中的QUOTED_IDENTIFIER选项来定义。如果这个选项被设为ON,则双引号中的标识符将被定义为一个分隔的标识符。在这种情况下,双引号不能被用于定界字符串。”  

记住以下几句话就能把分隔符理解了
 
以上这段话是书上的原话,我对分隔的标识符的理解是:例如"hu","h   u",[hu],  
    [   h   u]
这几个标识符都是不同的,在使用时就像使用a,b等标识符一样,只不过必须加上双引号或中括号,不知这样理解对不对。  

我自己对分隔符的理解:分隔符就是为了起到分隔作用。  SELECT   *   FROM   "My   Table"  
  WHERE   "Last   Name"   =   'O''Brien'

自我分析SELECT,FROM,where是关键字。"My   Table"就是标志符,而””就是分隔符
 
请大虾们指教。

其实你理解的挺对的  
 
但是别忘了它的作用是为了定义标识符  
 
符合所有标识符格式规则的标识符可以使用分隔符,也可以不使用分隔符。  
 
不符合标识符格式规则的标识符必须使用分隔符。  
   
 
分隔标识符在下列情况下使用:    
   
 
当在对象名称或对象名称的组成部分中使用保留字时。    
 
推荐不要使用保留关键字作为对象名称。从   Microsoft®   SQL   Server™   早期版本升级的数据库可能含有标识符,这些标识符包括早期版本中未保留而在   SQL   Server   2000   中保留的字。可用分隔标识符引用对象直到可改变其名称。  
   
 
当使用未被列为合法标识符的字符时。    
  SQL   Server  
允许在分隔标识符中使用当前代码页中的任何字符。但是,不加选择地在对象名称中使用特殊字符将使   SQL   语句和脚本难以阅读和维护。  
   
  Transact-SQL  
所使用的分隔符类型:  
   
   
   
 
说明     分隔符仅用于标识符。分隔符不能用于关键字,不论它们在   SQL   Server   中是否被标记为保留字。  
   
 
被引用的标识符用双引号   (")   分隔开:    
  SELECT   *   FROM   "Blanks   in   Table   Name"  
   
 
括在括号中的标识符用方括号   ([   ])   分隔:    
  SELECT   *   FROM   [Blanks   In   Table   Name]  
   
 
仅当   QUOTED_IDENTIFIER   选项设置为   ON   时,被引用的标识符才有效。默认情况下,当用于   SQL   Server     Microsoft   OLE   DB   提供程序和   SQL   Server   ODBC   驱动程序连接时,将   QUOTED_IDENTIFIER   设置为   ON。默认情况下,DB-Library   不将   QUOTED_IDENTIFIER   设置为   ON。不管使用何种接口,个别应用程序或用户可随时更改设置。SQL   Server   提供了多种方法来指定该选项。例如,在   SQL   Server   企业管理器和   SQL   查询分析器中,该选项可在对话中设置。在   Transact-SQL   中,可以使用   SET   QUOTED_IDENTIFIERsp_dboption     quoted   identifier   选项或   sp_configure     user   options   选项将此选项设为多种级别。  
   
 
  QUOTED_IDENTIFIER     ON   时,对于   SQL   语句中的双引号和单引号   (')   的使用,SQL   Server   遵循   SQL-92   规则:    
   
 
双引号只能用于分隔标识符,不能用于分隔字符串。    
 
为保持与现有应用程序的兼容性,SQL   Server   并不完全强制该规则。如果字符串没有超过标识符的长度,则该字符串可包含在双引号内。但不建议这样做。  
   
 
单引号必须用来包含字符串,不能用于分隔标识符。    
 
如果字符串包含单引号,则需要在单引号前再增加一个单引号:  
   
  SELECT   *   FROM   "My   Table"  
  WHERE   "Last   Name"   =   'O''Brien'  
   
 
  QUOTED_IDENTIFIER     OFF   时,对于双引号和单引号的使用,SQL   Server   遵循如下规则:    
   
 
引号不能用于分隔标识符,而是用括号作为分隔符。  
   
   
 
单引号或双引号可用于包含字符串。    
 
如果使用双引号,嵌入的单引号不需要用两个单引号来表示  
   
  SELECT   *   FROM   [My   Table]  
  WHERE   [Last   Name]   =   "O'Brien"  
   
 
无论   QUOTED_IDENTIFIER   的设置如何,都可以在括号中使用分隔符。  
   
 
分隔标识符规则  
 
分隔标识符的格式规则是:    
   
 
分隔标识符可以包含与常规标识符相同的字符数(1     128   个,不包括分隔符字符)。本地临时表标识符最多可以包含   116   个字符。  
   
   
 
标识符的主体可以包含当前代码页内字母(分隔符本身除外)的任意组合。例如,分隔符标识符可以包含空格、对常规标识符有效的任何字符以及下列任何字符:   代字号   (~)   连字符   (-)    
 
惊叹号   (!)   左括号   ({)    
 
百分号   (%)   右括号   (})    
 
插入号   (^)   撇号   (')    
  and  
  (&)   句号   (.)    
 
左圆括号   (()   反斜杠   (/)    
 
右圆括号   ())   重音符号   (`)    

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值