Condividi tramite


CREATE SYNONYM (Transact-SQL)

Crea un nuovo sinonimo.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

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
}

Argomenti

  • schema_name_1
    Specifica lo schema in cui viene creato il sinonimo. Se schema viene omesso, SQL Server utilizza lo schema predefinito dell'utente corrente.

  • synonym_name
    Nome del nuovo sinonimo.

  • server_name
    Indica il nome del server in cui è archiviato l'oggetto di base.

  • database_name
    Indica il nome del database in cui è archiviato l'oggetto di base. Se database_name viene omesso, viene utilizzato il database corrente.

  • schema_name_2
    Nome dello schema dell'oggetto di base. Se schema_name viene omesso, viene utilizzato lo schema predefinito dell'utente corrente.

  • object_name
    Nome dell'oggetto di base a cui fa riferimento il sinonimo.

Osservazioni

Non è necessario che l'oggetto di base sia esistente in fase di creazione del sinonimo. SQL Server verifica l'esistenza dell'oggetto di base in fase di esecuzione.

È possibile creare sinonimi per i tipi di oggetti seguenti:

Stored procedure di assembly (CLR)

Funzione con valori di tabella di assembly (CLR)

Funzione scalare di assembly (CLR)

Funzioni aggregate di aggregazione assembly (CLR)

Procedura-filtro-replica

Stored procedure estesa

Funzione scalare SQL

Funzione con valori di tabella di SQL

Funzione SQL inline con valori di tabella

Stored procedure di SQL

Vista

Tabella1 (definito dall'utente)

1 Include tabelle temporanee globali e locali

Non sono supportati i nomi composti da quattro parti per gli oggetti funzione di base.

È possibile creare, eliminare e fare riferimento ai sinonimi in SQL dinamico.

Autorizzazioni

Per poter creare un sinonimo in un determinato schema, un utente deve disporre dell'autorizzazione CREATE SYNONYM, oltre a disporre della proprietà dello schema o dell'autorizzazione ALTER SCHEMA.

L'autorizzazione CREATE SYNONYM è un'autorizzazione che può essere concessa.

[!NOTA]

Per compilare l'istruzione CREATE SYNONYM non è necessaria l'autorizzazione sull'oggetto di base, poiché tutti i controlli delle autorizzazioni sull'oggetto di base sono rimandati fino alla fase di esecuzione.

Esempi

A. Creazione di un sinonimo per un oggetto locale

Nell'esempio seguente viene prima creato un sinonimo per l'oggetto di base Product nel databaseAdventureWorks e quindi viene eseguita una query nel sinonimo.

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

Set di risultati:

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

ProductID Name

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

1 Adjustable Race

2 Bearing Ball

3 BB Ball Bearing

4 Headset Ball Bearings

(4 righe interessate)

B. Creazione di un sinonimo per l'oggetto remoto

Nell'esempio seguente, l'oggetto di base, Contact, è contenuto in un server remoto denominato Server_Remote.

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

C. Creazione di un sinonimo per una funzione definita dall'utente

Nell'esempio seguente viene creata una funzione denominata dbo.OrderDozen che aumenta le quantità degli ordini a una dozzina di unità uniformi. Viene quindi creato il sinonimo dbo.CorrectOrder per la funzione 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