2010-05-21 3 views
4

У меня есть база данных FooDb со схемой BarSchema, которая содержит таблицу Tbl (т.е. FooDb.BarSchema.Tbl)по умолчанию схема синоним

Я также вошли в систему как пользователь с BarSchema по умолчанию.

Этот запрос работает отлично

SELECT * FROM FooDb..Tbl 

У меня также есть синоним для этой таблицы в другой БД

CREATE SYNONYM TblSynonym FOR FooDb..Tbl 

Но теперь я получаю сообщение об ошибке «Неверное имя объекта„FooDb..Tbl“ " при выполнении

SELECT * FROM TblSynonym 

Если я изменить синоним к

CREATE SYNONYM TblSynonym FOR FooDb.BarSchema.Tbl 

все нормально работает.

Почему схема по умолчанию не работает в синонимах?

(Фон состоит в том, что я собираю данные из нескольких баз данных, все из которых имеют одинаковые имена таблиц, но разные имена схем. Было бы намного проще, если бы я мог установить схему по умолчанию для каждой базы данных для пользователя, а затем игнорировать это везде в сценарии)

ответ

2

documentation предлагает синтаксис db..tbl должен работать:

schema_name_2 Является ли имя схемы базового объекта. Если имя_схемы не указано, то используется по умолчанию для текущего пользователя: .

Это работает для меня в SQL Server 2008:

create synonym TestSynonym for TestDB..TestTable 

Одной из причин может быть то, что схема по умолчанию связана с пользователем, а не базы данных. Проверьте, есть ли у пользователя неожиданная схема по умолчанию? В моем SSMS этот параметр находится в базе данных -> Безопасность -> Пользователи -> Свойства.

+0

Я проверил, что схема по умолчанию правильная как в базе данных -> Безопасность -> Пользователи, так и в Connection-> Security-> Logins-> User. (Ошибка возникает при использовании синонима, а не при его создании) – adrianm

Смежные вопросы