请教quotename函数的理解

zhengyingcan 2008-06-21 07:34:27
请教quotename函数的理解,我已经看了很多帮助,储如以下示例 
QUOTENAME (Transact-SQL)

返回带有分隔符的 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')下面是结果集:


可是我还是不能理解 ,能不能请高手讲得通俗点.
...全文
2566 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
止独 2010-08-15
  • 打赏
  • 举报
回复
看懂了。。。非常感谢。
M博士 2009-02-06
  • 打赏
  • 举报
回复
终于懂了。
hanjs 2008-06-22
  • 打赏
  • 举报
回复
可以结帖了,我也是在行列转换中看到的,研究了下!
utpcb 2008-06-22
  • 打赏
  • 举报
回复
..没用过这个函数看看呵呵
SQLnewlearner 2008-06-22
  • 打赏
  • 举报
回复
我也问过这个.也是因为行列转换,没弄明白现学习一下.
-狙击手- 2008-06-22
  • 打赏
  • 举报
回复
。。
zhengyingcan 2008-06-22
  • 打赏
  • 举报
回复
明白了,非常感谢,我看到这个函数经常被用到行转列中,我还以为跟行转列有什么关系呢,呵呵,看来行转列关键因素不在这个函数上,非常感谢感谢各位大师的指点
lff642 2008-06-22
  • 打赏
  • 举报
回复
quotename('aa') 生成的有效的标识符为 [aa]

其他的用法.不太清楚.
nzperfect 2008-06-21
  • 打赏
  • 举报
回复

简单来说吧
比如你有一个表,名字叫 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))
zhiguo2008 2008-06-21
  • 打赏
  • 举报
回复
还有一点就是quotename函数有几种写法:
quotename('aa') 生成的有效的标识符为 [aa]
quotename('aa','') 生成的有效的标识符为 [aa]
quotename('aa','''') 生成的有效的标识符为 'aa'
hanjs 2008-06-21
  • 打赏
  • 举报
回复
如果是你写的那个结果,就又不对了,因为[]这个是一对!!!

因此要加个做个转义符,避免错误!
zhengyingcan 2008-06-21
  • 打赏
  • 举报
回复
谢谢大师指点,以下是MSDN中的解答
示例
以下示例接受字符串 abc[]def 并使用 [ 和 ] 字符来创建有效的 SQL Server 分隔标识符。

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

复制代码
[abc[]]def]

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

我不明白为什么

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

为什么中间多了一个]符号呢
结果应该就是
[abc[]def]
是不是MSND解答错误呢

fcuandy 2008-06-21
  • 打赏
  • 举报
回复
首先,sqlserver里的标识符有一定的规则,比如 你
create table abc 123(...)
那么中间含有空格,它不是符合规则的。

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


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

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

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

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

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

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

select * from [aa[]]bb]



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

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧