Condividi tramite


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