Что делает "%% DatabaseEx" в TSQL? - PullRequest
7 голосов
/ 29 апреля 2009

Я искал источник sys.sp_dbcmptlevel в SQL Server 2005.

В источнике есть эта строка, я не понимаю, как она работает.

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

Не похоже, что DatabaseEx является хранимой процедурой.

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

Так что мои вопросы

  • Что такое DatabaseEx и что оно делает?
  • Что такое %% до DatabaseEx?

Ответы [ 3 ]

7 голосов
/ 30 апреля 2009

Я думаю, что лучший ответ здесь заключается в том, что он не документирован и не поддерживается, поэтому не полагайтесь на него. Хотя интересно знать, как работает SQL Server внутри, все, что вы делаете с этими знаниями, может сломаться в будущем исправлении, пакете обновления или выпуске.

2 голосов
/ 29 апреля 2009

Интересная находка.

Системные SP также относятся к %% Object, %% Relation, %% ColumnEx, %% LinkedServer, %% Владелец, %% CurrentDatabase (), %% ErrorMessage, %% Module, %% DatabaseRef, %% LocalLogin, %% Alias, %% ServerConfiguration, %% IndexOrStats, %% ScalarType (и т. Д.)

Моя интерпретация заключается в том, что %% () извлекает какой-либо объект (COM?) На основе критериев фильтра, после чего следует вызов метода.

2 голосов
/ 29 апреля 2009
-- 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)

похоже на способ обращения к переменной базе данных как к объекту и внесения изменений в конфигурацию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...