关闭

quotename的用法

标签: sqlservertablesql
413人阅读 评论(0) 收藏 举报

首先,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))

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:616805次
    • 积分:10219
    • 等级:
    • 排名:第1656名
    • 原创:358篇
    • 转载:514篇
    • 译文:5篇
    • 评论:22条
    最新评论
    TechNet