Utilizzo dei sinonimi (Motore di database)
In diverse istruzioni SQL e contesti di espressione è possibile utilizzare sinonimi in sostituzione dell'oggetto di base a cui viene fatto riferimento. Nella tabella seguente è riportato un elenco di tali istruzioni e contesti di espressione:
SELECT |
INSERT |
UPDATE |
DELETE |
EXECUTE |
Sub-SELECT |
Quando si utilizzano i sinonimi nei contesti citati, l'istruzione viene eseguita sull'oggetto di base. Ad esempio, se un sinonimo fa riferimento a un oggetto di base che è una tabella e si inserisce una riga nel sinonimo, la riga verrà inserita nella tabella referenziata.
[!NOTA]
Non è possibile fare riferimento a un sinonimo che si trova in un server collegato.
È possibile utilizzare un sinomimo come parametro per la funzione OBJECT_ID. Tuttavia, la funzione restituisce l'ID oggetto del sinonimo, anziché l'oggetto di base.
Non è possibile fare riferimento a un sinonimo in un'istruzione DDL. Ad esempio, le istruzioni seguenti, che fanno riferimento a un sinonimo denominato dbo.MyProduct, generano errori:
ALTER TABLE dbo.MyProduct
ADD NewFlag int null;
EXEC ('ALTER TABLE dbo.MyProduct
ADD NewFlag int null');
Le istruzioni di autorizzazione seguenti sono associate solo al sinonimo e non all'oggetto di base:
GRANT |
DENY |
REVOKE |
|
I sinonimi non sono associati a uno schema, pertanto non è possibile farvi riferimento con i seguenti contesti di espressione associati a schema:
Vincoli CHECK |
Colonne calcolate |
Espressioni predefinite |
Espressioni di regole |
Viste associate a schema |
Funzioni associate a schema |
Per ulteriori informazioni sulle funzioni associate a schema, vedere Creazione di funzioni definite dall'utente (Motore di database).
Esempi
Nell'esempio seguente viene creato un sinonimo che verrà utilizzato negli esempi successivi.
USE tempdb;
GO
CREATE SYNONYM MyAddressType
FOR AdventureWorks.Person.AddressType;
GO
Nell'esempio seguente viene inserita una riga nella tabella di base cui fa riferimento il sinonimo MyAddressType.
USE tempdb;
GO
INSERT INTO MyAddressType (Name)
VALUES ('Test');
GO
Nell'esempio seguente viene illustrato il modo in cui è possibile fare riferimento a un sinonimo in un'istruzione nel linguaggio SQL dinamico.
USE tempdb;
GO
EXECUTE ('SELECT Name FROM MyAddressType');
GO
Vedere anche