Synonymes (Moteur de base de données)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Un synonyme est un objet de base de données utilisé aux fins suivantes :

  • Il fournit un nom de remplacement pour un autre objet de base de données, appelé « objet de base », qui peut exister sur un serveur local ou distant.

  • Il fournit une couche d'abstraction qui protège une application cliente contre les modifications apportées au nom ou à l'emplacement de l'objet de base.

Par exemple, considérez la table Employee d’Adventure Works, située sur un serveur nommé Server1. Pour faire référence à cette table à partir d’un autre serveur, Server2, une application cliente devrait utiliser le nom en quatre parties Server1.AdventureWorks.Person.Employee. En outre, si l'emplacement de la table devait changer, par exemple vers un autre serveur, l'application cliente devrait être modifiée de façon à refléter ce changement.

Pour résoudre ces deux problèmes, vous pouvez créer un synonyme, EmpTable dans un schéma dédié ou existant, RemoteObjects, sur Server2 pour la table Employee sur Server1. À présent, l’application cliente doit uniquement utiliser le nom en deux parties, RemoteObjects.EmpTable, pour référencer la table Employee Server1. De même, si l’emplacement de la table Employee change, vous devez modifier le synonyme EmpTablede manière à ce qu’il pointe vers le nouvel emplacement de la table Employee . Étant donné qu’il n’existe aucune instruction ALTER SYNONYM, vous devez d’abord supprimer le synonyme, RemoteObjects.EmpTable, puis recréer le synonyme portant le même nom, mais pointer le synonyme vers le nouvel emplacement de la table Employee .

Un synonyme est un objet appartenant à un schéma et, à ce titre, son nom doit être unique. Vous pouvez créer des synonymes pour les objets de base de données suivants :

Procédure stockée d'un assembly (CLR)

Fonction scalaire d'un assembly (CLR)

Procédure de réplication et de filtrage

Fonction scalaire SQL

Fonction table inline SQL

Affichage

Fonction table d'un assembly (CLR)

Fonctions d'agrégation d'un assembly (CLR)

Fonction table SQL

Procédure stockée SQL

Table* (définie par l’utilisateur)

*Comprend des tables temporaires locales et globales

Note

Les noms en quatre parties des objets de base de fonction ne sont pas pris en charge.

Un synonyme ne peut pas être l'objet de base d'un autre synonyme ni référencer une fonction d'agrégation définie par l'utilisateur.

La liaison entre un synonyme et son objet de base se fait uniquement par le nom. Toute vérification d'existence, de type et d'autorisations sur l'objet de base est différée jusqu'à l'exécution. Par conséquent, l'objet de base peut être modifié, supprimé ou bien supprimé et remplacé par un autre objet portant le même nom que l'objet de base initial. Par exemple, considérez un synonyme, dbo. MyContacts, qui fait référence à la table Person.Contact dans Adventure Works. Si la table Contact est supprimée, puis remplacée par une vue nommée Person.Contact, MyContacts référence la vue Person.Contact .

Les références aux synonymes ne sont pas liées au schéma. Par conséquent, un synonyme peut être supprimé à tout moment. Toutefois, si vous supprimez un synonyme, vous courez le risque de laisser des références non résolues à celui-ci. Ces références ne sont trouvées qu'au moment de l'exécution.

Synonymes et schémas

Si vous disposez d'un schéma par défaut qui ne vous appartient pas et que vous souhaitez créer un synonyme, vous devez qualifier le nom du synonyme avec le nom d'un schéma dont vous êtes propriétaire. Par exemple, si vous possédez un schéma S1, mais S2 est votre schéma par défaut et que vous utilisez l’instruction CREATE SYNONYM, vous devez préfixer le nom du synonyme avec le schéma S1, au lieu de nommer le synonyme à l’aide d’un nom à composant unique. Pour plus d’informations sur la création de synonymes, consultez CREATE SYNONYM (Transact-SQL).

Octroi d'autorisations sur un synonyme

Seuls les propriétaires de synonymes, les membres de db_ownerou ceux de db_ddladmin peuvent accorder une autorisation sur un synonyme.

Vous pouvez appliquer les instructions GRANT, DENY et REVOKE à tout ou partie des autorisations suivantes pour un synonyme :

CONTROL

EXECUTE

SELECT

UPDATE

Suppression

INSERT

TAKE OWNERSHIP

VIEW DEFINITION

Utilisation de synonymes

Vous pouvez utiliser les synonymes à la place de leur objet de base référencé dans de nombreuses instructions SQL et leurs contextes d'expression. Les colonnes suivantes contiennent une liste de ces instructions et contextes d’expression :

SELECT

UPDATE

Exécutez

INSERT

Suppression

Sub-selects

Si vous travaillez avec des synonymes dans les contextes précédemment cités, l'objet de base est affecté. Par exemple, si un synonyme référence un objet de base qui est une table et que vous insérez une ligne dans le synonyme, vous insérez en fait une ligne dans la table référencée.

Note

Vous ne pouvez pas référencer un synonyme situé sur un serveur lié.

Vous pouvez utiliser un synonyme en tant que paramètre de la fonction OBJECT_ID ; par contre, la fonction renvoie alors l'ID d'objet du synonyme, et non celui de l'objet de base.

Vous ne pouvez pas référencer un synonyme dans une instruction DDL. Par exemple, les instructions suivantes, qui référencent un synonyme nommé dbo.MyProduct, génèrent des erreurs :

ALTER TABLE dbo.MyProduct  
   ADD NewFlag int null;  
EXEC ('ALTER TABLE dbo.MyProduct  
   ADD NewFlag int null');  

Les instructions d'autorisation suivantes sont associées uniquement au synonyme, et pas à l'objet de base :

GRANT

REVOKE

DENY

Les synonymes ne sont pas liés à un schéma et ne peuvent donc pas être référencés dans les contextes d'expression suivants qui sont liés à un schéma :

Contraintes CHECK

Expressions par défaut

Vues liées à un schéma

Colonnes calculées

Expressions de règle

Fonctions liées à un schéma

Pour plus d’informations sur les fonctions liées au schéma, consultez Créer des fonctions définies par l’utilisateur (moteur de base de données).

Obtention d'informations sur les synonymes

L'affichage catalogue sys.synonyms contient une entrée pour chaque synonyme dans une base de données déterminée. Cet affichage catalogue expose les métadonnées synonymes, telles que le nom du synonyme et celui de l'objet de base. Pour plus d’informations, consultez sys.synonyms (Transact-SQL).

À l'aide des propriétés étendues, vous pouvez ajouter un texte descriptif ou instructif, des masques d'entrée et des règles de mise en forme comme propriétés d'un synonyme. Étant donné que la propriété est stockée dans la base de données, toutes les applications qui la lisent peuvent évaluer l'objet de la même manière. Pour plus d’informations, consultez sp_addextendedproperty (Transact-SQL).

Pour rechercher le type de base de l'objet de base d'un synonyme, utilisez la fonction OBJECTPROPERTYEX. Pour plus d’informations, consultez OBJECTPROPERTYEX (Transact-SQL).

Examples

L'exemple suivant retourne le type de base de l'objet de base d'un synonyme qui est un objet local.

USE tempdb;  
GO
CREATE SCHEMA SynSchema
GO  
CREATE SYNONYM SynSchema.MyEmployee   
FOR AdventureWorks2022.HumanResources.Employee;  
GO  
SELECT OBJECTPROPERTYEX(OBJECT_ID('SynSchema.MyEmployee'), 'BaseType') AS BaseType;  

L'exemple suivant retourne le type de base de l'objet de base d'un synonyme qui est un objet distant situé sur un serveur appelé Server1.

EXECUTE sp_addlinkedserver Server1;  
GO  
CREATE SYNONYM SynSchema.MyRemoteEmployee  
FOR Server1.AdventureWorks2022.HumanResources.Employee;  
GO  
SELECT OBJECTPROPERTYEX(OBJECT_ID('MyRemoteEmployee'), 'BaseType') AS BaseType;  
GO  

Créer des synonymes
CREATE SYNONYM (Transact-SQL)
DROP SYNONYM (Transact-SQL)