在问题中 MS-SQL 上是否有任何(隐藏的)内置函数来取消引用对象名称?作者正在寻求有关是否存在“取消引用”引用字符串的内部函数的建议。作者McNets注意到,一些内部函数可以处理带引号的(例如[MyTable]
)和不带引号MyTable
的(例如 )参数值(例如OBJECT_ID()
)。
在David Browne - Microsoft给出的答案 ( 1 )中,引述如下:
... QUOTENAME 的倒数是 PARSENAME,它具有导航多部分名称的额外能力。
我不同意这部分答案,并发表以下评论:
我同意您可以修改传递给的参数
PARSENAME()
以显示多部分标识符的部分,无论是、SERVER
还是部分。但恕我直言,说这与 的相反有点牵强。DATABASE
SCHEMA
OBJECT
PARSENAME
QUOTENAME
我现在的问题是:
函数PARSENAME()
是相反的QUOTENAME()
吗?
根据ypercubeᵀᴹ的评论,内容如下:
...我创建了一个简单的语句来查看这些函数返回的不同值。代码如下:
代码
基本上,我设置一个字符串值,输出该值,
QUOTENAME()
然后输出该值,然后PARSENAME()
是QUOTENAME()
ed 值并输出它。结果
结果非常有趣:
当基本文本
Test.dbo.test
( OriginalText_3 ) 被传递给QUOTENAME()
它被转换为的函数时:'Test.dbo.test'
( QuotedText_3 )当QuotedText_3字符串
'Test.dbo.test'
传递给PARSENAME()
函数时,它被转换为:test'
( Parsed_QuotedText_3 )结论
鉴于我已经证明ypercubeᵀᴹ的论文是错误的,我认为可以肯定地说该函数
PARSENAME()
不是QUOTENAME()
.根据Aaron Bertrand的反馈,方括号的代码
[ ]
(添加到原始脚本)方括号的附加代码
[ ]
方括号的输出
[ ]
并完成双引号的代码
双引号的附加代码
"
双引号的输出
"
根据ypercube™的反馈和Aaron Bertrand的新反馈,我们得出了共同的结论
PARSENAME()
是QUOTENAME()
如果满足以下条件的倒数:PARSENAME(x,1)
-1
(QUOTENAME(x,q))
在哪里q={1,2}
和x='{'any_string_value'}
参考: