Пользовательская функция в базе данных master не будет выполняться - PullRequest
3 голосов
/ 01 марта 2012

У меня есть эта функция с именем fn_blah, которая находится в базе данных Master блока SQL Server 2000. Эта же функция находится в базе данных master блока SQL Server 2008. В окне SQL Server 2000 функция прекрасно работает в другом контексте базы данных без указания владельца (например, dbo):

User OtherDB1;
EXEC fn_blah;

Но в окне SQL Server 2008 вышеуказанный запрос не будет работать. Что будет работать, если вы измените контекст базы данных на master, а затем запустите его, как описано выше. Или вы запускаете следующее:

EXEC master.dbo.fn_blah

Кто-нибудь видел такое поведение раньше? Любая помощь приветствуется. Спасибо!

1 Ответ

5 голосов
/ 02 марта 2012

База данных master - это системная база данных, в которой хранится всякая информация обо всем остальном на вашем сервере.

Когда вы помещаете пользовательские объекты в master, вы можете получить к ним доступ без контекста базы данных.

Это, по сути, непреднамеренное поведение - движок проверит некоторые объекты (в зависимости от имени объекта и версии SQL Server) в master, прежде чем проверять текущий контекст БД.

Это действительно плохая идея, а не то, что нужно для разработки ваших процессов. Могут возникнуть всевозможные проблемы, не в последнюю очередь из-за того, что эти объекты в мастере перезаписываются при обновлении или перезапуске сервера, поскольку мастер не предназначен для хранения пользовательских объектов!

Короче говоря, не делайте этого! Используйте имя из трех частей для вызовов функций.

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