是什么导致将对象名称传递给系统存储过程是合法的sp_helptext
?
什么机制将对象名称转换为字符串?
例如
-- works
sp_helptext myproc
sp_helptext [myproc]
sp_helptext [dbo.myproc]
-- and behaves the same as a string
sp_helptext 'myproc'
sp_helptext 'dbo.myproc'
-- does not work
sp_helptext dbo.myproc -- Msg 102, Level 15, State 1, Line 1 incorrect syntax near '.'
-- an additional case that does not work.
sp_helptext [dbo].[myproc] -- Msg 102, Level 15, State 1, Line 1 incorrect syntax
Run Code Online (Sandbox Code Playgroud)
我不需要单引号有效的.
过程名称似乎很奇怪,除非它具有分隔模式名称和过程名称。我正在寻找有关如何将其从带引号的名称自动转换为要作为参数值传递的字符串文字的解释。
我没有要解决的具体问题;我只是对没有记录的事情感到好奇。
sql-server stored-procedures syntax parameter database-internals
在问题MS-SQL 上是否有任何(隐藏的)内置函数来取消引用对象名称?作者正在寻求有关是否存在“取消引用”引用字符串的内部函数的建议。作者McNets已经注意到,一些内部函数可以处理引用(例如[MyTable]
)和未引用(例如)MyTable
传递的参数值(例如OBJECT_ID()
)。
在David Browne - Microsoft给出的答案 ( 1 ) 中,引述如下:
... QUOTENAME 的反面是 PARSENAME,它具有导航多部分名称的附加功能。
我不同意这部分答案的以下评论:
我不同意,你可以修改传递给一个参数
PARSENAME()
来显示多部分的部分标识是它的SERVER
,DATABASE
,SCHEMA
或OBJECT
部分。但恕我直言,PARSENAME
与此相反的说法QUOTENAME
有点牵强。
我现在的问题是:
函数PARSENAME()
是相反的QUOTENAME()
吗?