quotename()函数 

quotename()函数 请教quotename函数的理解,我已经看了很多帮助,储如以下示例 QUOTENAME(Transact-SQL)返回带有分隔符的Unicode字符串,分隔符的加入可使输入的字符串成为有效的MicrosoftSQLServer2005分隔标识符。Transact-SQL语法约定语法QUOTENAME(‘character_string'[,’q…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

请教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’)下面是结果集:

可是我还是不能理解 ,能不能请高手讲得通俗点.
===============================================================
首先,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 不是一个有效的标识符。
===============================================================
谢谢大师指点,以下是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解答错误呢

===============================================================
如果是你写的那个结果,就又不对了,因为[]这个是一对!!!

因此要加个做个转义符,避免错误!
===============================================================
还有一点就是quotename函数有几种写法:
  quotename(‘aa’) 生成的有效的标识符为 [aa]
  quotename(‘aa’,”) 生成的有效的标识符为 [aa]
  quotename(‘aa’,””) 生成的有效的标识符为 ‘aa’
===============================================================
简单来说吧
比如你有一个表,名字叫 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))

===============================================================
明白了,非常感谢,我看到这个函数经常被用到行转列中,我还以为跟行转列有什么关系呢,呵呵,看来行转列关键因素不在这个函数上,非常感谢感谢各位大师的指点
===============================================================

转载于:https://www.cnblogs.com/qiantuwuliang/archive/2009/05/31/1492802.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/164267.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 安全测试常用的几个工具有_工具软件有哪些

    安全测试常用的几个工具有_工具软件有哪些下面介绍了这些工具的主要功能以及教程、书籍、视频等。端口扫描器:NmapNmap(NetworkMapper)是一款著名的、用来扫描端口和绘制网络的免费开源基于控制台的黑客工具。Nmap被用于发

    2022年8月1日
    7
  • 简述mux vlan的功能及应用场景_vlan的原理

    简述mux vlan的功能及应用场景_vlan的原理MuxVLAN是一种在交换机上的2层隔离技术,基于VLAN实现资源的控制。MuxVLAN技术中包含了主VLAN和辅助VLAN;辅助VLAN分为隔离VLAN和组VLAN。一个主VLAN中可以同时包含多个组VLAN,最多只能包含1个隔离VLAN。同一个组VLAN中的端口可以互相通信,不同组VLAN中的端口无法通信;同一个隔离组中的端口不可以通信;但是隔离VLAN与组VLAN中的端口,都可以与主VLAN中的端口进行通信。简述端口隔离的实现原理端口隔离是一种在

    2022年8月10日
    7
  • 【Stream流】Sort排序详解「建议收藏」

    【Stream流】Sort排序详解「建议收藏」很多时候由于需求的复杂性,很多直接从数据库查出的数据并不能直接返回前端,需要进行处理,处理之后又需要排序,这时候一般都会使用Stream流的Sort排序场景一:普通排序正序(升序)list=list.stream().sorted().collect(Collectors.toList());或者list.stream().sorted(Comparator.comparing(Student::getAge))倒序(降序)list.stream().sorted(Comparator.

    2022年8月12日
    10
  • [4G&5G专题-119]:5G培训应用篇-4-5G典型行业应用的解决方案(车联网、智慧医疗、智能教育、智能电网)

    [4G&5G专题-119]:5G培训应用篇-4-5G典型行业应用的解决方案(车联网、智慧医疗、智能教育、智能电网)前言:前言.1总目录(1)5G概述、发展与演进(2)5G新的网络架构与关键技术(3)5G新的业务与应用(4)5G在垂直行业行业典型的解决方案前言.2本章

    2022年5月5日
    57
  • latex公式换行等号对齐_左大括号换行

    latex公式换行等号对齐_左大括号换行latex中一般的公式拆分可以用multline或split,区别在于公式编码显示的位置不同,前者编码在换行的最后一行,后者编码在整个换行公式的中间。然而,因为不能与alignalignat共用,在大括号中换行并对齐有一定难度。查阅相关资料后,发现可以在\equation环境中插入表格array,并利用行合并宏包multirow,同时可以用表格线宏包booktabs

    2022年10月11日
    6
  • Linux磁盘的挂载和卸载[通俗易懂]

    Linux磁盘的挂载和卸载[通俗易懂]磁盘经过分区和格式化后,如果想要使用这些磁盘,那么还需要挂载。在挂载某个分区前,需要先建立一个挂载点,这个挂载点是以目录的形式出现的,一旦把某个分区挂载到这个挂载点下,往这个目录写数据时,就都会写到该分区中。挂载的命令是:mount我们先建立一个新目录,并在这个新目录下新建立一个新文件,然后把sdb5挂载到此目录下,并用命令du查看是否已挂载上。此时我们会发现,新建立的ne…

    2022年5月27日
    88

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号