当前位置:网络安全 > SqlServer中的quotename用法及示例

SqlServer中的quotename用法及示例

  • 发布:2023-09-30 04:02

转载自:https://www.sychzs.cn/suizhikuo/p/4691696.html

语法
QUOTENAME ( 'character_string' [ , 'quote_character' ] )
参数
'character_string' 由 Unicode 字符数据组成的字符串。 character_string 是系统名值。
'quote_character' 用作分隔符的单字符字符串。它可以是单引号 (')、左括号或右括号 ([ ]) 或英文双引号 (")。如果未指定 quote_character,则使用方括号。
实验
quotename 函数看起来分隔符默认是 [ ]
select quotename('df[]jls') 输出结果: [df[]]jls]
select quotename('df[]jls',']') 输出结果: [df[] ]jls]
select quotename('df[]jls','') 输出结果:[df[]]jls]
select quotename('df[]jls','''' ) 输出结果:'df[]jls'
select quotename('df[]jls','}') 输出结果:{df[]jls}
select quotename('df{}jls',' }') 输出结果:{df{}}jls}
请注意字符串df[]jls中有两个右方括号,表示转义字符。
为什么输出结果是:[df[] ] jls]呢?
[df[]]jls]
分解为
[]],中间的]代表右边的'in'也应该这样表达
也就是说转义]]后得到],两个单引号转义为一个单引号
实际使用
简单来说
比如你有一个表,名为index
并且您有一个动态查询。参数为表名
statements @tbname varchar(256)
set @tbname='index'
---查看此表中的数据:
print('select * from '+@tbname)
exec('select * from '+@tbname)
--这样打印的数据为
select * from index
因为index是关键字,肯定有错误,加括号即可:
select * from [index]
这样就得到QUOTENAME,即:
print ('select * from '+QUOTENAME(@tbname))
--结果: select * from [index]
exec('select * from '+QUOTENAME(@tbname))
或者你的如果表名是abc 123,直接查询肯定会出错,而且还得用表名作为参数。这种情况下可以使用quotename来转义
总结
quotename的主要作用是作为列名、表名、存储过程等需要以a的形式传递的数据库对象范围。为了保证参数的有效性,可以使用quotename进行转义。当然,你也可以在两边加上'[]',但是这样写就很明显了。会增加代码的复杂度

相关文章