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
Voir aussi