“%% DatabaseEx”在TSQL中做什么?
问题描述:
我正在查看SQL Server 2005中的sys.sp_dbcmptlevel的来源。“%% DatabaseEx”在TSQL中做什么?
在源代码中,有这条线我不明白它是如何工作的。
EXEC %%DatabaseEx(Name = @dbname).SetCompatibility(Level = @input_cmptlevel)
它似乎不是DatabaseEx
是一个存储过程。
-- does not return any result
select *
from sys.procedures
where [name] like '%DatabaseEx%'
所以我的问题是
- 什么是
DatabaseEx
和它有什么作用? - 什么是%%之前
DatabaseEx
?
答
-- Note: database @dbname may not exist anymore
-- Change compatibility level
-- If invoke gets error, exception will abort this proc.
EXEC %%DatabaseEx(Name = @dbname).SetCompatibility(Level = @input_cmptlevel)
它看起来像一个方式来引用变量数据库作为对象,使配置的变化
答
有趣的发现。系统SP也指%% Object,%% Relation,%% ColumnEx,%% LinkedServer,%% Owner,%% CurrentDatabase(),%% ErrorMessage,%%模块,%% DatabaseRef,%% LocalLogin ,%% Alias,%% ServerConfiguration,%% IndexOrStats,%%标量类型(等)
我的解释是%%()根据过滤条件检索某种(COM?)对象,然后是方法呼叫。
答
我认为这里最好的答案是它没有记录,也不支持,所以不要依赖它。虽然了解SQL Server如何在内部工作很有意思,但使用这些知识所做的任何事情都有可能在未来的修补程序,服务包或发行版中打破。
Google可能无法搜索诸如“%%”... arg之类的内容。也许我需要更多的谷歌练习... – Sung 2009-04-29 13:31:17
我仍然无法找到任何文档... – Sung 2009-04-29 18:18:09
谷歌代码搜索允许像%%这样的符号,但它似乎有一个更有限的搜索区域。这似乎完全没有在MSDN上记录。我感觉系统存储过程中使用的TSQL与其他地方的TSQL没有完全一样的解析。 – 2009-04-30 02:08:27