我在查看SQL Server 2005中sys.sp_dbcmptlevel的来源。
在源代码中,有这条线我不明白它是如何工作的。
EXEC %%DatabaseEx(Name = @dbname).SetCompatibility(Level = @input_cmptlevel)
DatabaseEx
似乎不是存储过程。
-- does not return any result
select *
from sys.procedures
where [name] like '%DatabaseEx%'
所以我的问题是
DatabaseEx
以及它做了什么?DatabaseEx
之前 %% 是什么?答案 0 :(得分:7)
我认为这里最好的答案是没有记录,也没有支持,所以不要依赖它。虽然了解SQL Server如何在内部工作很有趣,但是您使用该知识所做的任何事情都有可能在未来的修补程序,Service Pack或发行版中中断。
答案 1 :(得分:2)
-- 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)
它看起来像是一种将变量数据库称为对象并进行配置更改的方法
答案 2 :(得分:2)
有趣的发现。
System SP还引用%% Object,%% Relation,%% ColumnEx,%% LinkedServer,%% Owner,%% CurrentDatabase(),%% ErrorMessage,%% Module,%% DatabaseRef,%% LocalLogin, %%别名,%% ServerConfiguration,%% IndexOrStats,%% ScalarType(etc)
我的解释是%%()根据过滤条件检索某种(COM?)对象,然后是方法调用。