CREATE SYNONYM (Transact-SQL)

Syntaxe

CREATE SYNONYM [ schema_name_1. ] synonym_name FOR < object >

< object > :: =
{
    [ server_name.[ database_name ] . [ schema_name_2 ].| database_name . [ schema_name_2 ].| schema_name_2. ] object_name
}

Arguments

  • schema_name_1
    Spécifie le schéma dans lequel est créé le synonyme. Si schema n'est pas spécifié, SQL Server utilise le schéma par défaut de l'utilisateur actif.

  • synonym_name
    Nom du nouveau synonyme.

  • server_name
    Nom du serveur contenant l'objet de base.

  • database_name
    Nom de la base de données contenant l'objet de base. Si la valeur database_name n'est pas spécifiée, le nom de la base de données active est utilisé.

  • schema_name_2
    Nom du schéma pour l'objet de base. Si schema_name n'est pas spécifié, le schéma par défaut de l'utilisateur actif est utilisé.

  • object_name
    Nom de l'objet de base auquel fait référence le synonyme.

Notes

L'objet de base ne doit pas exister lors de la création du synonyme. SQL Server vérifie l'existence de l'objet de base au cours de l'exécution.

Vous pouvez créer des synonymes pour les types d'objets suivants :

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

Fonction table d'un assembly (CLR)

Fonction scalaire d'un assembly (CLR)

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

Procédure de réplication et de filtrage

Procédure stockée étendue

Fonction scalaire SQL

Fonction table SQL

Fonction table inline SQL

Procédure stockée SQL

Affichage

Table1 (définie par l'utilisateur)

1 Comprend des tables temporaires locales et globales

Les noms en quatre composantes ne sont pas pris en charge pour les objets de base de fonction.

Vous pouvez créer, supprimer et référencer des synonymes dans des instructions SQL dynamiques.

Autorisations

Pour créer un synonyme dans un schéma donné, un utilisateur doit disposer de l'autorisation CREATE SYNONYM, et il doit posséder le schéma ou bénéficier de l'autorisation ALTER SCHEMA.

L'autorisation CREATE SYNONYM est octroyable.

[!REMARQUE]

Vous n'avez pas besoin d'une autorisation sur un objet de base pour réussir une compilation de l'instruction CREATE SYNONYM, car toute vérification d'autorisation sur l'objet de base est reportée jusqu'à l'exécution.

Exemples

A. Création d'un synonyme pour un objet local

L'exemple suivant crée d'abord un synonyme pour l'objet de base, Product dans la base de données AdventureWorks, puis il interroge le synonyme.

USE tempdb;
GO
-- Create a synonym for the Product table in AdventureWorks.
CREATE SYNONYM MyProduct
FOR AdventureWorks.Production.Product;
GO

-- Query the Product table by using the synonym.
USE tempdb;
GO
SELECT ProductID, Name 
FROM MyProduct
WHERE ProductID < 5;
GO

Voici l'ensemble des résultats.

-----------------------

ProductID Name

----------- --------------------------

1 Adjustable Race

2 Bearing Ball

3 BB Ball Bearing

4 Headset Ball Bearings

(4 ligne(s) affectée(s))

B. Création d'un synonyme pour un objet distant

Dans l'exemple suivant, l'objet de base Contact se trouve sur un serveur distant appelé Server_Remote.

EXEC sp_addlinkedserver Server_Remote;
GO
USE tempdb;
GO
CREATE SYNONYM MyEmployee FOR Server_Remote.AdventureWorks.HumanResources.Employee;
GO

C. Création d'un synonyme pour une fonction définie par l'utilisateur

L'exemple suivant crée une fonction nommée dbo.OrderDozen qui augmente des quantités de commandes pour obtenir des douzaines d'unités exactement. L'exemple crée ensuite le synonyme dbo.CorrectOrder pour la fonction dbo.OrderDozen.

-- Creating the dbo.OrderDozen function
CREATE FUNCTION dbo.OrderDozen (@OrderAmt int)
RETURNS int
WITH EXECUTE AS CALLER
AS
BEGIN
IF @OrderAmt % 12 <> 0
BEGIN
    SET @OrderAmt +=  12 - (@OrderAmt % 12)
END
RETURN(@OrderAmt);
END;
GO

-- Using the dbo.OrderDozen function
DECLARE @Amt int
SET @Amt = 15
SELECT @Amt AS OriginalOrder, dbo.OrderDozen(@Amt) AS ModifiedOrder

-- Create a synonym dbo.CorrectOrder for the dbo.OrderDozen function.
CREATE SYNONYM dbo.CorrectOrder
FOR dbo.OrderDozen;
GO

-- Using the dbo.CorrectOrder synonym.
DECLARE @Amt int
SET @Amt = 15
SELECT @Amt AS OriginalOrder, dbo.CorrectOrder(@Amt) AS ModifiedOrder