2009-04-29 27 views
7

Estaba buscando la fuente de sys.sp_dbcmptlevel en SQL Server 2005.¿Qué hace "%% DatabaseEx" en TSQL?

En la fuente, hay esta línea que no entiendo cómo funciona.

EXEC %%DatabaseEx(Name = @dbname).SetCompatibility(Level = @input_cmptlevel) 

No parece que DatabaseEx sea un procedimiento almacenado.

-- does not return any result 
select * 
from sys.procedures 
where [name] like '%DatabaseEx%' 

Así que mis preguntas son

  • ¿Cuál es DatabaseEx y qué hace?
  • ¿Qué es %% antes de DatabaseEx?
+0

Google puede ser inútil para buscar cosas como "%%" ... arg. Tal vez necesito más práctica en Google ... – Sung

+0

Todavía no puedo encontrar ninguna documentación sobre esto ... – Sung

+3

La búsqueda en Google Code permite símbolos como %%, pero parece tener un área de búsqueda mucho más limitada. Esto parece estar completamente indocumentado en MSDN. Me da la impresión de que el TSQL utilizado en Procedimientos almacenados del sistema no se analiza exactamente igual que TSQL en otro lugar. –

Respuesta

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) 

se ve como una forma de referirse a una base de datos variable como un objeto y make config cambia

2

hallazgo interesante.

SP del sistema también se refieren a %% Object, %% Relation, %% ColumnEx, %% LinkedServer, %% Owner, %% CurrentDatabase(), %% ErrorMessage, %% Module, %% DatabaseRef, %% LocalLogin , %% Alias, %% ServerConfiguration, %% IndexOrStats, %% ScalarType (etc.)

Mi interpretación es que el %%() recupera algún tipo de objeto (COM?) Según los criterios del filtro, seguido por un método llamada.

+0

Estaba pensando que estaba accediendo a una extensión extendida, pero estoy seguro de eso en este momento. – Sung

7

Creo que la mejor respuesta aquí es que no está documentada y no es compatible, así que no confíe en ella. Si bien es interesante saber cómo funciona SQL Server internamente, cualquier cosa que haga con ese conocimiento tiene el potencial de incluir una revisión, un paquete de servicio o una versión en el futuro.

+0

Tienes razón sobre eso, Mike. Solo quería saber qué hace pero no lo iba a usar en un script de producción. – Sung