Sinonimi (Motore di database)Synonyms (Database Engine)

Un sinonimo è un oggetto di database che viene utilizzato per gli scopi seguenti:A synonym is a database object that serves the following purposes:

  • Fornisce un nome alternativo per un altro oggetto di database, definito oggetto di base, presente su un server locale o remoto.Provides an alternative name for another database object, referred to as the base object, that can exist on a local or remote server.

  • Fornisce un livello di astrazione che consente di proteggere un'applicazione client dalle modifiche apportate al nome o alla posizione dell'oggetto di base.Provides a layer of abstraction that protects a client application from changes made to the name or location of the base object.

    Si consideri ad esempio la tabella Employee di Adventure WorksAdventure Works, che si trova su un server denominato Server1.For example, consider the Employee table of Adventure WorksAdventure Works, located on a server named Server1. Per farvi riferimento da un altro server, Server2, un'applicazione client dovrebbe usare il nome composto da quattro parti Server1.AdventureWorks.Person.Employee.To reference this table from another server, Server2, a client application would have to use the four-part name Server1.AdventureWorks.Person.Employee. Inoltre, se la tabella venisse spostata in un altro server, sarebbe necessario modificare l'applicazione client in modo da riflettere la modifica della posizione.Also, if the location of the table were to change, for example, to another server, the client application would have to be modified to reflect that change.

    Per risolvere entrambi i problemi, è possibile creare un sinonimo, EmpTable, in Server2 per la tabella Employee in Server1.To address both these issues, you can create a synonym, EmpTable, on Server2 for the Employee table on Server1. L'applicazione client dovrà quindi usare unicamente il nome composto da una parte, EmpTable, per fare riferimento alla tabella Employee .Now, the client application only has to use the single-part name, EmpTable, to reference the Employee table. Se la posizione della tabella Employee viene modificata, sarà necessario modificare il sinonimo, EmpTable, per puntare alla nuova posizione della tabella Employee .Also, if the location of the Employee table changes, you will have to modify the synonym, EmpTable, to point to the new location of the Employee table. Poiché non esiste un'istruzione ALTER SYNONYM, è necessario prima eliminare il sinonimo, EmpTable, quindi ricrearlo con lo stesso nome, ma puntando alla nuova posizione della tabella Employee.Because there is no ALTER SYNONYM statement, you first have to drop the synonym, EmpTable, and then re-create the synonym with the same name, but point the synonym to the new location of Employee.

    Un sinonimo appartiene a uno schema e, come gli altri oggetti di uno schema, deve avere un nome univoco.A synonym belongs to a schema, and like other objects in a schema, the name of a synonym must be unique. È possibile creare sinonimi per gli oggetti di database seguenti:You can create synonyms for the following database objects:

Stored procedure assembly (CLR)Assembly (CLR) stored procedure Funzione con valori di tabella assembly (CLR)Assembly (CLR) table-valued function
Funzione scalare assembly (CLR)Assembly (CLR) scalar function Funzioni di aggregazione assembly (CLR)Assembly (CLR) aggregate functions
Procedura di filtro della replicaReplication-filter-procedure Stored procedure estesaExtended stored procedure
Funzione scalare SQLSQL scalar function Funzione con valori di tabella SQLSQL table-valued function
Funzione con valori di tabella inline SQLSQL inline-tabled-valued function Stored procedure SQLSQL stored procedure
VisualizzaView Tabella* (definita dall'utente)Table* (User-defined)

Include tabelle temporanee globali e localiIncludes local and global temporary tables

Nota

I nomi composti da quattro parti non sono supportati per gli oggetti funzione di base.Four-part names for function base objects are not supported.

Un sinonimo non può essere l'oggetto di base di un altro sinonimo e non può fare riferimento a una funzione di aggregazione definita dall'utente.A synonym cannot be the base object for another synonym, and a synonym cannot reference a user-defined aggregate function.

L'associazione tra un sinonimo e il relativo oggetto di base avviene unicamente in base al nome.The binding between a synonym and its base object is by name only. Tutti i controlli relativi all'esistenza, al tipo e alle autorizzazioni per l'oggetto di base sono rimandati alla fase di esecuzione.All existence, type, and permissions checking on the base object is deferred until run time. L'oggetto di base può pertanto essere modificato, eliminato o eliminato e sostituito da un altro oggetto con lo stesso nome dell'oggetto di base originale.Therefore, the base object can be modified, dropped, or dropped and replaced by another object that has the same name as the original base object. Si consideri ad esempio il sinonimo MyContactsche fa riferimento alla tabella Person.Contact di Adventure WorksAdventure Works.For example, consider a synonym, MyContacts, that references the Person.Contact table in Adventure WorksAdventure Works. Se la tabella Contact viene eliminata e sostituita da una vista denominata Person.Contact, il sinonimo MyContacts farà riferimento alla vista Person.Contact .If the Contact table is dropped and replaced by a view named Person.Contact, MyContacts now references the Person.Contact view.

I riferimenti a sinonimi non sono associati a schemiReferences to synonyms are not schema-bound. e pertanto è possibile eliminare un sinonimo in qualsiasi momento.Therefore, a synonym can be dropped at any time. Se si elimina un sinonimo, si corre tuttavia il rischio di lasciare riferimenti inesatti al sinonimo eliminato,However, by dropping a synonym, you run the risk of leaving dangling references to the synonym that was dropped. che verranno trovati solo in fase di esecuzione.These references will only be found at run time.

Sinonimi e schemiSynonyms and Schemas

Se è disponibile uno schema predefinito di cui non si è proprietari e si desidera creare un sinonimo, è necessario qualificare il nome del sinonimo con il nome dello schema di cui si è proprietari.If you have a default schema that you do not own and want to create a synonym, you must qualify the synonym name with the name of a schema that you do own. Se ad esempio si è proprietari di uno schema x, ma lo schema predefinito è y e si usa l'istruzione CREATE SYNONYM, è necessario anteporre al nome del sinonimo lo schema x, anziché assegnare al sinonimo un nome composto da una parte.For example, if you own a schema x, but y is your default schema and you use the CREATE SYNONYM statement, you must prefix the name of the synonym with the schema x, instead of naming the synonym by using a single-part name. Per altre informazioni sulla creazione dei sinonimi, vedere CREATE SYNONYM (Transact-SQL).For more information about how to create synonyms, see CREATE SYNONYM (Transact-SQL).

Concessione delle autorizzazioni per un sinonimoGranting Permissions on a Synonym

Le autorizzazioni per un sinonimo possono essere concesse unicamente dai proprietari del sinonimo, membri di db_ownero di db_ddladmin .Only synonym owners, members of db_owner, or members of db_ddladmin can grant permission on a synonym.

È possibile concedere, negare o revocare le autorizzazioni seguenti per un sinonimo:You can GRANT, DENY, REVOKE all or any of the following permissions on a synonym:

CONTROLCONTROL DELETEDELETE
EXECUTEEXECUTE INSERTINSERT
SELECTSELECT TAKE OWNERSHIPTAKE OWNERSHIP
UPDATEUPDATE VIEW DEFINITIONVIEW DEFINITION

Utilizzo dei sinonimiUsing Synonyms

In diverse istruzioni SQL e contesti di espressione è possibile utilizzare sinonimi in sostituzione dell'oggetto di base a cui viene fatto riferimento.You can use synonyms in place of their referenced base object in several SQL statements and expression contexts. Nella tabella seguente è riportato un elenco di tali istruzioni e contesti di espressione:The following table contains a list of these statements and expression contexts:

SELECTSELECT INSERTINSERT
UPDATEUPDATE DELETEDELETE
EXECUTEEXECUTE Sub-SELECTSub-selects

Quando si utilizzano i sinonimi nei contesti citati, l'istruzione viene eseguita sull'oggetto di base.When you are working with synonyms in the contexts previously stated, the base object is affected. 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.For example, if a synonym references a base object that is a table and you insert a row into the synonym, you are actually inserting a row into the referenced table.

Nota

Non è possibile fare riferimento a un sinonimo che si trova in un server collegato.You cannot reference a synonym that is located on a linked server.

È possibile utilizzare un sinonimo come parametro per la funzione OBJECT_ID. Tuttavia, la funzione restituisce l'ID oggetto del sinonimo, anziché l'oggetto di base.You can use a synonym as the parameter for the OBJECT_ID function; however, the function returns the object ID of the synonym, not the base object.

Non è possibile fare riferimento a un sinonimo in un'istruzione DDL.You cannot reference a synonym in a DDL statement. Ad esempio, le istruzioni seguenti, che fanno riferimento a un sinonimo denominato dbo.MyProduct, generano errori:For example, the following statements, which reference a synonym named dbo.MyProduct, generate errors:

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:The following permission statements are associated only with the synonym and not the base object:

GRANTGRANT DENYDENY
REVOKEREVOKE

I sinonimi non sono associati a uno schema, pertanto non è possibile farvi riferimento con i seguenti contesti di espressione associati a schema:Synonyms are not schema-bound and, therefore, cannot be referenced by the following schema-bound expression contexts:

vincoli CHECKCHECK constraints Colonne calcolateComputed columns
Espressioni predefiniteDefault expressions Espressioni di regoleRule expressions
Viste associate a schemaSchema-bound views Funzioni associate a schemaSchema-bound functions

Per altre informazioni sulle funzioni associate a schema, vedere Creare funzioni definite dall'utente (Motore di database).For more information about schema-bound functions, see Create User-defined Functions (Database Engine).

Recupero di informazioni sui sinonimiGetting Information About Synonyms

La vista del catalogo sys.synonyms contiene una voce per ogni sinonimo incluso in un database specifico.The sys.synonyms catalog view contains an entry for each synonym in a given database. La vista del catalogo espone i metadati dei sinonimi, ad esempio il nome del sinonimo e il nome dell'oggetto di base.This catalog view exposes synonym metadata such as the name of the synonym and the name of the base object. Per altre informazioni sulla vista del catalogo sys.synonyms, vedere sys.synonyms (Transact-SQL).For more information about the sys.synonyms catalog view, see sys.synonyms (Transact-SQL).

Utilizzando proprietà estese, è possibile aggiungere istruzioni o descrizioni, maschere di input e regole di formattazione come proprietà di un sinonimo.By using extended properties, you can add descriptive or instructional text, input masks, and formatting rules as properties of a synonym. Poiché la proprietà viene archiviata nel database, tutte le applicazioni che leggono la proprietà possono valutare l'oggetto nello stesso modo.Because the property is stored in the database, all applications that read the property can evaluate the object in the same way. Per altre informazioni, vedere sp_addextendedproperty (Transact-SQL).For more information, see sp_addextendedproperty (Transact-SQL).

Per trovare il tipo di base dell'oggetto di base di un sinonimo, utilizzare la funzione OBJECTPROPERTYEX.To find the base type of the base object of a synonym, use the OBJECTPROPERTYEX function. Per altre informazioni, vedere OBJECTPROPERTYEX (Transact-SQL).For more information, see OBJECTPROPERTYEX (Transact-SQL).

EsempiExamples

Nell'esempio seguente viene restituito il tipo di base dell'oggetto di base di un sinonimo che rappresenta un oggetto locale.The following example returns the base type of a synonym's base object that is a local object.

USE tempdb;  
GO  
CREATE SYNONYM MyEmployee   
FOR AdventureWorks2012.HumanResources.Employee;  
GO  
SELECT OBJECTPROPERTYEX(OBJECT_ID('MyEmployee'), 'BaseType') AS BaseType;  

Nell'esempio seguente viene restituito il tipo di base dell'oggetto di base di un sinonimo che rappresenta un oggetto remoto in un server denominato Server1.The following example returns the base type of a synonym's base object that is a remote object located on a server named Server1.

EXECUTE sp_addlinkedserver Server1;  
GO  
CREATE SYNONYM MyRemoteEmployee  
FOR Server1.AdventureWorks2012.HumanResources.Employee;  
GO  
SELECT OBJECTPROPERTYEX(OBJECT_ID('MyRemoteEmployee'), 'BaseType') AS BaseType;  
GO  

Creare sinonimiCreate Synonyms

CREATE SYNONYM (Transact-SQL)CREATE SYNONYM (Transact-SQL)

DROP SYNONYM (Transact-SQL)DROP SYNONYM (Transact-SQL)