Synonyme (Datenbank-Engine)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

Ein Synonym ist ein Datenbankobjekt, das zu folgenden Zwecken dient:

  • Ein Synonym stellt einen alternativen Namen für ein anderes Datenbankobjekt bereit, das als Basisobjekt bezeichnet wird und auf einem lokalen Server oder Remoteserver gespeichert sein kann.

  • Ein Synonym stellt eine Abstraktionsschicht bereit, die eine Clientanwendung vor Änderungen schützt, die am Namen oder Speicherort des Basisobjekts vorgenommen werden.

Betrachten Sie beispielsweise die Tabelle "Employee " von Adventure Works, die sich auf einem Server mit dem Namen "Server1" befindet. Eine Clientanwendung müsste, um von einem anderen Server, Server2, auf diese Tabelle zu verweisen, den vierteiligen Namen Server1.AdventureWorks.Person.Employeeverwenden. Die Clientanwendung müsste außerdem geändert werden, wenn sich der Speicherort der Tabelle ändert, z. B. in einen anderen Server.

Um beide Probleme zu beheben, können Sie ein Synonym, EmpTable in einem dedizierten oder vorhandenen Schema, RemoteObjects, auf Server2 für die Tabelle "Mitarbeiter " auf Server1 erstellen. Jetzt muss die Clientanwendung nur den zweiteiligen Namen RemoteObjects.EmpTable verwenden, um auf die Mitarbeitertabelle Server1 zu verweisen. Wenn sich außerdem der Speicherort der Employee -Tabelle ändert, müssen Sie das Synonym EmpTableändern, um auf den neuen Speicherort der Employee -Tabelle zu verweisen. Da keine ALTER SYNONYM-Anweisung vorhanden ist, müssen Sie zuerst das Synonym RemoteObjects.EmpTable ablegen und dann das Synonym mit demselben Namen erneut erstellen, weisen sie nun aber auf den neuen Speicherort der Tabelle "Employee " hin.

Ein Synonym gehört zu einem Schema, und der Name eines Schemas muss wie andere Objekte in einem Schema eindeutig sein. Sie können Synonyme für die folgenden Datenbankobjekte erstellen:

Gespeicherte Assemblyprozedur (CLR)

Assemblyskalarfunktion (CLR)

Replikationsfilterprozedur

SQL-Skalarfunktion

SQL-Inline-Tabellenwertfunktion

Sicht

Assembly-Tabellenwertfunktion (CLR)

Assemblyaggregatfunktion (CLR)

SQL-Tabellenwertfunktion

Gespeicherte SQL-Prozedur

Tabelle* (benutzerdefiniert)

*Enthält lokale und globale temporäre Tabellen

Hinweis

Vierteilige Namen für Funktionsbasisobjekte werden nicht unterstützt.

Ein Synonym kann nicht das Basisobjekt für ein anderes Synonym sein. Außerdem kann ein Synonym nicht auf eine benutzerdefinierte Aggregatfunktion verweisen.

Die Bindung zwischen einem Synonym und dem zugehörigen Basisobjekt erfolgt nur mit dem Namen. Alle Überprüfungen auf das Vorhandensein, den Typ und die Berechtigungen für das Basisobjekt werden bis zur Laufzeit verschoben. Deshalb kann das Basisobjekt geändert, gelöscht oder gelöscht und durch ein anderes Objekt, das den gleichen Namen wie das ursprüngliche Basisobjekt hat, ersetzt werden. Betrachten Sie z. B. ein Synonym, dbo. MyContacts, die auf die Tabelle "Person.Contact " in Adventure Works verweist. Wenn die Contact -Tabelle gelöscht und durch die Person.Contact-Sicht ersetzt wird, verweist MyContacts nun auf die Person.Contact -Sicht.

Verweise auf Synonyme sind nicht schemagebunden. Deshalb kann ein Synonym jederzeit gelöscht werden. Durch das Löschen eines Synonyms besteht jedoch die Gefahr, dass Verweise auf das gelöschte Synonym zurückbleiben. Diese Verweise werden erst zur Laufzeit gefunden.

Synonyme und Schemas

Wenn Sie über ein Standardschema verfügen, das nicht Ihnen gehört, und Sie ein Synonym erstellen möchten, müssen Sie den Synonymnamen mit dem Namen eines Schemas, das Ihnen gehört, qualifizieren. Wenn Sie z. B. ein Schema S1 besitzen, aber S2 Ihr Standardschema ist und Sie die CREATE SYNONYM-Anweisung verwenden, müssen Sie dem Namen des Synonyms das Schema S1 voranstellen, anstatt das Synonym mithilfe eines einzelteiligen Namens zu benennen. Weitere Informationen zum Erstellen von Synonymen finden Sie unter CREATE SYNONYM (Transact-SQL).

Erteilen von Berechtigungen für Synonyme

Nur Besitzer eines Synonyms, Mitglieder der Rollen db_owneroder db_ddladmin können Berechtigungen für ein Synonym erteilen.

Sie können eine GRANT-, DENY-, REVOKE-Anweisung für alle oder eine beliebige Anzahl der folgenden Berechtigungen für ein Synonym ausführen:

CONTROL

EXECUTE

SELECT

UPDATE

Delete

INSERT

TAKE OWNERSHIP

VIEW DEFINITION

Verwenden von Synonymen

Synonyme können anstelle des Basisobjekts, auf das verwiesen wird, in mehreren SQL-Anweisungen und Ausdruckskontexten verwendet werden. Die folgenden Spalten enthalten eine Liste dieser Anweisungen und Ausdruckskontexte:

SELECT

UPDATE

Führen Sie

INSERT

DELETE

Untergeordnete SELECT-Anweisungen

Wenn Sie Synonyme in den vorher beschriebenen Kontexten verwenden, ist das Basisobjekt davon betroffen. Angenommen, ein Synonym verweist auf ein Basisobjekt, das eine Tabelle darstellt, und Sie fügen eine Zeile in das Synonym ein. In Wirklichkeit fügen Sie dann eine Zeile in die Tabelle ein, auf die verwiesen wird.

Hinweis

Auf ein Synonym, das auf einem Verbindungsserver gespeichert ist, kann nicht verwiesen werden.

Sie können ein Synonym als Parameter für die OBJECT_ID-Funktion verwenden; die Funktion gibt jedoch die Objekt-ID des Synonyms und nicht das Basisobjekt zurück.

Sie können in einer DDL-Anweisung nicht auf ein Synonym verweisen. So generieren beispielsweise die folgenden Anweisungen, die auf ein Synonym namens dbo.MyProductverweisen, einen Fehler:

ALTER TABLE dbo.MyProduct  
   ADD NewFlag int null;  
EXEC ('ALTER TABLE dbo.MyProduct  
   ADD NewFlag int null');  

Die folgenden Berechtigungsanweisungen beziehen sich nur auf das Synonym, nicht auf das Basisobjekt.

GRANT

REVOKE

VERWEIGERN

Synonyme sind nicht schemagebunden. Deshalb kann von den folgenden schemagebundenen Ausdruckskontexten nicht auf Synonyme verwiesen werden:

CHECK-Einschränkungen

Standardausdrücke

Schemagebundene Sichten

Berechnete Spalten

Regelausdrücke

Schemagebundene Funktionen

Weitere Informationen zu schemagebundenen Funktionen finden Sie unter Erstellen von benutzerdefinierten Funktionen (Datenbankmodul).

Abrufen von Informationen zu Synonymen

Die sys.synonyms-Katalogsicht enthält einen Eintrag für jedes Synonym in einer bestimmten Datenbank. Diese Katalogsicht macht Synonymmetadaten verfügbar, wie z. B. den Namen des Synonyms und den Namen des Basisobjekts. Weitere Informationen finden Sie unter sys.synonyms (Transact-SQL).

Mithilfe erweiterter Eigenschaften können Sie Beschreibungs- oder Anweisungstext, Eingabeformate und Formatierungsregeln als Eigenschaften eines Synonyms hinzufügen. Da die Eigenschaft in der Datenbank gespeichert wird, können alle Anwendungen, die die Eigenschaft lesen, das Objekt auf die gleiche Weise auswerten. Weitere Informationen finden Sie unter sp_addextendedproperty (Transact-SQL).

Verwenden Sie die OBJECTPROPERTYEX-Funktion, um den Basistyp des Basisobjekts eines Synonyms zu suchen. Weitere Informationen finden Sie unter OBJECTPROPERTYEX (Transact-SQL).

Beispiele

Das folgende Beispiel gibt den Basistyp des Basisobjekts eines Synonyms zurück, das ein lokales Objekt ist.

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

Das folgende Beispiel gibt den Basistyp des Basisobjekts eines Synonyms zurück, das ein Remoteobjekt auf einem Server mit dem Namen Server1ist.

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

Erstellen von Synonymen
CREATE SYNONYM (Transact-SQL)
DROP SYNONYM (Transact-SQL)