SQL SERVER的QUOTENAME函数
大家好,又见面了,我是你们的朋友全栈君。 quotename 使函数中的输入成为一个有效的标识符
select QUOTENAME(‘dddd’) 返回[dddd]
select QUOTENAME(‘dddd’,'”‘) 返回”dddd”
首先,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 分隔标识符。
语法
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
–结论
/*
初步理解为解决有些对象是SQLSERVER关键字的情况,即用该函数规范对象名,以便程序顺利运行
*/
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/164277.html原文链接:https://javaforall.cn
相关文章
- Sql Server datetime 和 smalldatetime时间函数的区别
- Sql server DATEADD日期函数的使用[通俗易懂]
- SQLServer 错误 3151 无法还原 master 数据库。 正在关闭 SQL Server。 请检查错误日志,然后重新生成 master 数据库。 有关如何重新生成 master 数据库的详细信息,请参阅 SQL Server 联机丛书。 故障 处理 修复 支持远程
- SQL Server 2012 身份验证(Authentication)
- Sql Server中REPLACE函数的使用
- sql语句优化之SQL Server(详细整理)
- ms sql server中实现的unix时间戳函数(含生成和格式化,可以和mysql兼容)
- 在SQL Server中查询资料库的TABLE数量与名称的sql语句
- SQL Server 常用函数使用方法小结
- SQL SERVER 表与表之间 字段一对多sql语句写法
- 使用利用SQL Server替换函数实现字符串替换(sqlserver替换函数)
- sql server比较Oracle 与 SQL Server的优缺点(oracleltgt)
- SQL Server中的换行粒度控制(换行sqlserver)
- 招聘:攻城狮需要你!SQL Server开发工程师火热招聘中!(招聘sqlserver)
- serverOracle 与 SQL Server之间的友谊连接(oracle连接sql)
- [停电后SQL Server复原:一次挣扎的实践](停电后sqlserver)
- SQL Server计时器:实现时间管理的最佳选择(sqlserver计时器)
- 判断SQL Server中相等性比较的实践(sqlserver 相等)
- 功能SQL Server实现的数据查重功能发挥作用(sqlserver的查重)
- od使用SQL Server实现数据库升级(sqlserver的u)
- null处理SQL Server数据库中空值的ifnull函数(sqlserver的if)
- 函数SQL Server:学习标量函数的基本使用方法(sqlserver 标量)
- sql体验SQL Server:本周SQLServer之旅(sqlserver 本周)
- 深入探究SQL Server更新慢的原因(sqlserver更新慢)
- SQL Server托盘带来的新机遇(sqlserver托盘)
- 使用SQL Server语句提升数据库运行效率(sqlserver或语句)
- SQL Server中的小于号:理解与实践(sqlserver小于号)
- SQL Server数据库检索取交集实现技术总结(sqlserver取交集)
- SQL Server中使用取余数处理数据(sqlserver取余数)
- SQL Server列函数:掌握数据表处理技巧(sqlserver列函数)
- SQL Server 主备架构——数据保障稳定性的保障(sqlserver 主备)
- 探索Oracle的SQL跟踪工具:优化数据库性能的重要利器(oracle跟踪sql工具)
- SQL Server导出SQL文件:实现快速数据备份(sqlserver导出sql文件)
- 排查:SQL Server访问速度缓慢(访问sqlserver慢)
- sql查询本年、本月、本日记录的语句,附SQL日期函数