在阅读 QUOTENAME() 的文档时,我发现它支持各种分隔符:
除了将内容包装在开始和结束定界符中之外,QUOTENAME() 似乎会将所有与结束定界符匹配的包含字符加倍。例如:
QUOTENAME('matrix[2][3]')
产生 [matrix[2]][3]]]
,QUOTENAME('cell(2)(3)', '(')
产生 (cell(2))(3)))
。
虽然我了解使用单引号、双引号和方括号来分隔标识符和文本值(主要是在构建动态 SQL 时),但我不确定其他形式可能有什么用途。
SQL Server 语法中是否有任何地方括号、大括号、尖括号或重音符号分隔的内容具有特殊含义? SQL 之外是否有其他形式可能有用的语言(XML、JSON 等)?这种情况必须将双重字符识别为转义。
这更多的是一个兴趣问题,而不是我试图解决的一个特定问题。
从讨论来看,这些其他选项似乎是长期存在的未记录的行为,似乎在现实世界中几乎没有效用。
使用其中一些字符作为引号的其他语言或文件格式不会以
QUOTENAME()
的方式转义嵌入的分隔符。 (反斜杠转义似乎是其中的主要方法。)
当文档开源并由社区维护时,这些未记录的行为被添加到文档中。最好将未记录的行为保留为未记录或明确未定义。