2010-05-21 4 views
4

I possède une base de données FooDb avec un schéma BarSchema qui contient une table Tbl (à savoir FooDb.BarSchema.Tbl)schéma par défaut de synonymes

Je suis également identifié en tant que utilisateur avec BarSchema par défaut.

Cette requête fonctionne bien

SELECT * FROM FooDb..Tbl 

J'ai aussi un synonyme de ce tableau dans un autre db

CREATE SYNONYM TblSynonym FOR FooDb..Tbl 

Mais maintenant, je reçois une erreur « Nom d'objet incorrect « FooDb..Tbl » " lors de l'exécution

SELECT * FROM TblSynonym 

Si je change le synonyme de

CREATE SYNONYM TblSynonym FOR FooDb.BarSchema.Tbl 

cela fonctionne très bien.

Pourquoi le schéma par défaut ne fonctionne-t-il pas dans les synonymes? (En arrière-plan, je rassemble des données de plusieurs bases de données qui ont toutes le même nom de table mais des noms de schéma différents.) Je pourrais définir le schéma par défaut pour chaque base de données sur l'utilisateur, puis ignorer partout dans le script)

Répondre

2

le documentation suggère la syntaxe db..tbl devrait fonctionner:

schema_name_2 est le nom du schéma de l'objet de base. Si nom_schéma n'est pas spécifié, le schéma par défaut de l'utilisateur actuel est utilisé.

Cela fonctionne pour moi dans SQL Server 2008:

create synonym TestSynonym for TestDB..TestTable 

Une cause peut-être que le schéma par défaut est associé à l'utilisateur, et non la base de données. Vérifiez si votre utilisateur a un schéma par défaut inattendu Dans mon SSMS, ce paramètre se trouve sous Base de données -> Sécurité -> Utilisateurs -> Propriétés.

+0

J'ai vérifié que le schéma par défaut est correct sous Base de données-> Sécurité-> Utilisateurs et Connexion-> Sécurité-> Connexions-> Utilisateur. (L'erreur se produit lors de l'utilisation du synonyme, pas lors de sa création) – adrianm

Questions connexes