2009-04-29 20 views
7

Szukałem źródła sys.sp_dbcmptlevel w SQL Server 2005.Co robi "%% DatabaseEx" w TSQL?

W źródle nie ma tej linii Nie rozumiem jak to działa.

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

Nie wydaje się, że DatabaseEx jest procedurą składowaną.

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

więc moje pytania są

  • Co jest DatabaseEx i co to robi?
  • Co to jest %% przed DatabaseEx?
+0

Google może być bezużyteczny do wyszukiwania informacji takich jak "%%" ... arg. Być może potrzebuję więcej praktyki w googlowaniu ... – Sung

+0

Nadal nie mogę znaleźć żadnej dokumentacji na ten temat ... – Sung

+3

Wyszukiwarka Google Code pozwala na symbole takie jak %%, ale wydaje się, że ma znacznie bardziej ograniczony obszar wyszukiwania. Wygląda na to, że jest całkowicie nieudokumentowane w MSDN. Odnoszę wrażenie, że TSQL używany w System Stored Procedures nie jest parsowany dokładnie tak samo jak TSQL w innym miejscu. –

Odpowiedz

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) 

wygląda sposób odnieść się do zmiennej bazy danych jako przedmiot i make config zmienia

2

Ciekawe znalezisko.

System SP odnoszą się również do %% obiektu, %% relacji, %% kolumny, liczby %% LinkedServer, %% właściciela, %% CurrentDatabase(), %% ErrorMessage, %% moduł, %% DatabaseRef, %% LocalLogin , %% Alias, %% ServerConfiguration, %% IndexOrStats, %% ScalarType (etc)

Moja interpretacja jest taka, że ​​%%() pobiera jakiś obiekt (COM?) W oparciu o kryteria filtru, a następnie metodę połączenie.

+0

Myślałem, że był dostęp do rozszerzonego sproc, ale jestem nawet pewien o tym w tym momencie. – Sung

7

Myślę, że najlepszą odpowiedzią jest to, że nie jest ona udokumentowana i nie jest obsługiwana, więc nie należy polegać na niej. Chociaż ciekawe jest, jak SQL Server działa wewnętrznie, wszystko, co robisz z tą wiedzą, może potencjalnie złamać przyszłą poprawkę, dodatek Service Pack lub wydanie.

+0

Masz rację, Mike. Chciałem tylko wiedzieć, co robi, ale nie zamierzałem go użyć w scenariuszu produkcyjnym. – Sung