Utilisation des synonymes (moteur de base de données)

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. Le tableau suivant contient une liste de ces instructions et contextes d'expression :

SELECT

INSERT

UPDATE

DELETE

EXECUTE

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.

[!REMARQUE]

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

DENY

REVOKE

 

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

Colonnes calculées

Expressions par défaut

Expressions de règle

Vues liées à un schéma

Fonctions liées à un schéma

Pour plus d'informations sur les fonctions liées à un schéma, consultez Création de fonctions définies par l'utilisateur (moteur de base de données).

Exemples

L'exemple suivant crée un synonyme qui sera utilisé dans les autres exemples.

USE tempdb;
GO
CREATE SYNONYM MyAddressType
FOR AdventureWorks.Person.AddressType;
GO

L'exemple suivant insère une ligne dans la table de base référencée par le synonyme MyAddressType.

USE tempdb;
GO
INSERT INTO MyAddressType (Name)
VALUES ('Test');
GO

L'exemple suivant montre comment un synonyme peut être référencé en SQL dynamique.

USE tempdb;
GO
EXECUTE ('SELECT Name FROM MyAddressType');
GO