关闭

SQL2005关于quotename的用法(转)

标签: sql server
111人阅读 评论(0) 收藏 举报
分类:

转自:http://www.cnblogs.com/Fskjb/archive/2010/04/19/1715105.html

首先,sqlserver里的标识符有一定的规则,比如 你
create table abc 123(…)
那么中间含有空格,它不是符合规则的。

你会写做 create table abc 123
即以[]来定界标识符。

quotename将 字串成为有效的标识符。

它有什么用呢? 我举个例子:

你有个表名字叫做 aa[]bb

当某些应用动态语句查询时 你如何写呢
exec(‘select * from aa[]bb’) ?X

set @sql=’select * from ’ + quotename(‘aa[]bb’)
exec(@sql)

当然你也可以直接写出转义的写法

select * from [aa[]]bb]

也就是说,quotename 使函数中的输入成为一个有效的标识符。
比如上例中 aa[]bb 不是一个有效的标识符。

还有一点就是quotename函数有几种写法:
quotename(‘aa’) 生成的有效的标识符为 [aa]
quotename(‘aa’,”) 生成的有效的标识符为 [aa]
quotename(‘aa’,””) 生成的有效的标识符为 ‘aa’

解释2:

简单来说吧
比如你有一个表,名字叫 index
你有一个动态查询,参数是表名
declare @tbname varchar(256)
set @tbname=’index’
—查这个表里的数据:
print(‘select * from ‘+@tbname)
exec(‘select * from ‘+@tbname)

–这样print出来的数据是
select * from index

因为index是字键字,肯定出错,加上括号就可以了:
select * from [index]

这便有了QUOTENAME,即:
print(‘select * from ‘+QUOTENAME(@tbname))
–结果:select * from [index]
exec(‘select * from ‘+QUOTENAME(@tbname))

返回带有分隔符的 Unicode 字符串,分隔符的加入可使输入的字符串成为有效的 Microsoft SQL Server 2005 分隔标识符。

Transact-SQL 语法约定

语法
QUOTENAME ( ‘character_string’ [ , ‘quote_character’ ] )
参数
‘character_string’

Unicode 字符数据构成的字符串。character_string 是 sysname 值。

‘quote_character’

用作分隔符的单字符字符串。可以是单引号 (‘)、左方括号或右方括号 ([ ]) 或者英文双引号 (“)。如果未指定 quote_character,则使用方括号。

返回类型
nvarchar(258)

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

SELECT QUOTENAME(‘abc[]def’)

下面是结果集:

[abc[]]def]

(1 row(s) affected)

请注意,字符串 abc[]def 中的右方括号有两个,用于指示转义符。

为什么输出结果是:[abc[]]def]呢?

[abc[]]def]
分解成
[]]中间的]是表示右边的]是原样输出也就是说]]就表示]
就跟”中的’要用”来表示一样

就是说和]]转义后得到–> ] 和两个单引号转义成一个单引号是一个道理

quotename函数看分隔符是什么因为默认是[ ] ,如果用的是}作分界符,那么 SELECT QUOTENAME(‘abc[]def’)

就不会发生转义了.

select QUOTENAME(‘abc”def’,””) –分隔符是两个单引号
– ‘abc”def’
select QUOTENAME(‘abc]def’) –分隔符是]
– [abc]]def]
select QUOTENAME(‘abc}def’,’{}’) –分隔符是}
– {abc}}def}

示例:

create table tab([i[]]d] int);
go
select name from sys.columns where object_id=object_id(‘tab’);
/* i[]d */

也就是说:SELECT QUOTENAME(‘abc[]def’) ,quotename函数默认分隔符是[ ]
所以在给quotename(‘abc[]def’)需要对abc后的[]进行转义,如果quotename(‘abc[]def’,’{‘)
也就是设置了分隔符为{就不会发生转义,该转义取决于分隔符.

简单的说假设你要在分隔符在[ ]里面使用[]那么就必须对综括号里面的]进行转义:]]
所以结果为:[abc[]]def],同理要在{}里面使用{}那么必须对}进行转义:}}
那么结果为:{abc{}}def}

示例:

select quotename(‘abc[]def’) –默认是分隔符:[ ]
–[abc[]]def]
select quotename(‘abc{}def’,’}’)
–{abc{}}def}

QUOTENAME()函数

这个函数和SQL Server对象名组合使用,以将结果传递给表达式。它只用于给输入的字符串加一对方括号,并返回新形成的字符串。如果参数包含保留的分隔符或者封装字符(比如引号或括号),这个函数将修改字符串,以便SQL Server能将结果字符串中的这类字符当成文本字符。如下面的例子所示,查询的结果如图

SELECT QUOTENAME(COLUMN_NAME) AS ColumnName
FROM INFORMATION_SCHEMA. COLUMNS

0
0
查看评论

SQL2005关于quotename的用法(转)

首先,sqlserver里的标识符有一定的规则,比如  你  create table abc 123(...)  那么中间含有空格,它不是符合规则的。  你会写做 create table [abc 123](....)  即以[]来定...
  • merry3688
  • merry3688
  • 2016-07-22 08:33
  • 157

---------SQL2005关于quotename的用法 -----------------

 <br />首先,sqlserver里的标识符有一定的规则,比如  你 <br />create table abc 123(...) <br />那么中间含有空格,它不是符合规则的。 <br /><br />你会写做...
  • fredrickhu
  • fredrickhu
  • 2010-06-05 15:49
  • 1724

关于quotename的用法

首先,sqlserver里的标识符有一定的规则,比如  你  create table abc 123(...)  那么中间含有空格,它不是符合规则的。  你会写做 create table [abc 123](....)  即以[]来定...
  • wozengcong
  • wozengcong
  • 2015-02-04 14:24
  • 297

SQL Server中QUOTENAME函数的使用

--函数QUOTENAME--功能:返回带有分隔符的Unicode 字符串,分隔符的加入可使输入的字符串成为有效的Microsoft SQL Server 2005 分隔标识符。--语法QUOTENAME ( character_...
  • Hello_World_wusu
  • Hello_World_wusu
  • 2009-12-01 14:40
  • 6669

sql server中quotename()函数的用法

操作sql server尤其是写存储过程时,要用到各种各样的函数,今天就总结一个quotename()的用法。 1.语法: quotename(‘character_string’[,‘quote_character’]) []里面的内容说明可以省略,缺省情况下,说明用‘[]’引用。 cha...
  • u013857407
  • u013857407
  • 2015-03-17 10:07
  • 3962

quotename用法

首先,sqlserver里的标识符有一定的规则,比如  你 create table abc 123(...) 那么中间含有空格,它不是符合规则的。 你会写做 create table [abc 123](....) 即以[]来定界标识符。 quotename将 ...
  • jufeng9318
  • jufeng9318
  • 2012-08-07 22:22
  • 366

quotename的用法

<br />首先,sqlserver里的标识符有一定的规则,比如你 <br />create table abc 123(...) <br />那么中间含有空格,它不是符合规则的。 <br /><br />你会写做 create table...
  • tianlianchao1982
  • tianlianchao1982
  • 2011-01-25 10:19
  • 449

SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别 及动态查询中的标识符函数QUOTENAME

SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别 以表名为参数时需在SQL表名前加QUOTENAME 写法如下 QUOTENAME(@tablename) MSSQL为我们提供了两种动态执行SQL语句的命令,分别是 EXEC 和 SP...
  • DN_XIAOXIAO
  • DN_XIAOXIAO
  • 2018-01-06 14:28
  • 92

SqlServer中quotename用法与实例

语法  QUOTENAME ( 'character_string' [ , 'quote_character' ] )  参数 'character_string' Unicode 字符数据构成的字符串。character...
  • facefeather
  • facefeather
  • 2011-11-23 17:19
  • 186

Unity3d中Quaternion.LookRotation使用方法

笔记简介: 经常会使用物体旋转与移动的操作,但是使用的方法有很多种,不是每种方法都是合适的,经过多次测试最终确定了下面的方法比较靠谱,核心函数采用了Quaternion类LookRotation函数和插值函数实现。 在工程里面创建了一个胶囊体和长方体,如图所示: 在...
  • moonhot537
  • moonhot537
  • 2016-06-07 20:56
  • 1646
    个人资料
    • 访问:18402次
    • 积分:293
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:47篇
    • 译文:1篇
    • 评论:0条