"%% DatabaseEx"在TSQL中做了什么?

dan*_*die 7 sql t-sql sql-server stored-procedures sql-server-2005

我在查看SQL Server 2005 中sys.sp_dbcmptlevel的源代码.

在源代码中,有这条线我不明白它是如何工作的.

EXEC %%DatabaseEx(Name = @dbname).SetCompatibility(Level = @input_cmptlevel)
Run Code Online (Sandbox Code Playgroud)

它似乎不是DatabaseEx一个存储过程.

-- does not return any result
select  *
from    sys.procedures
where   [name] like '%DatabaseEx%'
Run Code Online (Sandbox Code Playgroud)

所以我的问题是

  • DatabaseEx它是什么以及它做了什么?
  • 什么是%%之前DatabaseEx

Mik*_*ick 7

我认为这里最好的答案是它没有记录,也没有得到支持,所以不要依赖它.虽然了解SQL Server如何在内部工作很有趣,但您使用该知识所做的任何事情都有可能在未来的修补程序,Service Pack或发行版中出现问题.


KM.*_*KM. 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)
Run Code Online (Sandbox Code Playgroud)

它看起来像是一种将变量数据库作为对象引用并进行配置更改的方法