首先,sqlserver里的标识符有一定的规则,比如 你
create table abc 123(...)
那么中间含有空格,它不是符合规则的。
你会写做 create table [abc 123](....)
即以[]来定界标识符。
quotename将 字串成为有效的标识符。 ---QUOTENAME(@tbname)
它有什么用呢? 我举个例子:
你有个表名字叫做 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 ))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。