CREATE SYNONYM (Transact-SQL)
Crea un nuovo sinonimo.
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
Vedere anche