Freigeben über


Synonyme (Datenbankmodul)

Ein Synonym ist ein Datenbankobjekt, das folgende Zwecke erfüllt:

  • Stellt einen alternativen Namen für ein anderes Datenbankobjekt bereit, das als Basisobjekt bezeichnet wird, das auf einem lokalen oder Remoteserver vorhanden sein kann.

  • Stellt eine Ebene der Abstraktion bereit, die eine Clientanwendung vor Änderungen schützt, die an dem Namen oder speicherort des Basisobjekts vorgenommen wurden.

Betrachten Sie beispielsweise die Tabelle "Employee " von Adventure Works, die sich auf einem Server mit dem Namen "Server1" befindet. Um auf diese Tabelle von einem anderen Server, Server2, zu verweisen, müsste eine Clientanwendung den vierteiligen Namen Server1.AdventureWorks.Person.Employee verwenden. Wenn sich beispielsweise der Speicherort der Tabelle in einen anderen Server ändern würde, müsste die Clientanwendung geändert werden, um diese Änderung widerzuspiegeln.

Um beide Probleme zu beheben, können Sie ein Synonym , EmpTable, auf Server2 für die Tabelle "Mitarbeiter " auf Server1 erstellen. Jetzt muss die Clientanwendung nur den Einzelteilnamen EmpTable verwenden, um auf die Tabelle "Mitarbeiter " zu verweisen. Wenn sich die Position der Tabelle " Mitarbeiter " ändert, müssen Sie außerdem das Synonym "EmpTable" ändern, um auf die neue Position der Tabelle " Mitarbeiter " zu verweisen. Da es keine ALTER SYNONYM-Anweisung gibt, müssen Sie zuerst das Synonym EmpTable löschen und dann das Synonym mit demselben Namen neu erstellen, dabei jedoch auf den neuen Speicherort von Employee verweisen.

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

Gespeicherte Assemblyprozedur (CLR) Assembly-Tabellenwertfunktion (CLR)
Assembly (CLR) Skalare Funktion CLR-Assembly-Aggregatfunktionen
Replikationsfilterprozedur Erweiterte gespeicherte Prozedur
SQL-Skalarfunktion SQL-Tabellenwertfunktion
SQL-Inline-Tabellenwert-Funktion Gespeicherte SQL-Prozedur
Ansehen Tabelle1 (benutzerdefiniert)

1 Umfasst 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, und ein Synonym kann nicht auf eine benutzerdefinierte Aggregatfunktion verweisen.

Die Bindung zwischen einem Synonym und seinem ursprünglichen Objekt erfolgt nur basierend auf dem Namen. Alle Existenz-, Typ- und Berechtigungsüberprüfungen für das Basisobjekt werden bis zur Laufzeit zurückgestellt. Daher kann das Basisobjekt geändert, gelöscht oder gelöscht und durch ein anderes Objekt ersetzt werden, das denselben Namen wie das ursprüngliche Basisobjekt hat. Betrachten Sie beispielsweise ein Synonym", "MyContacts", das auf die Tabelle "Person.Contact " in Adventure Works verweist. Wenn die Tabelle "Kontakt " gelöscht und durch eine Ansicht namens "Person.Contact" ersetzt wird, verweist MyContacts jetzt auf die Ansicht " Person.Contact ".

Verweise auf Synonyme sind nicht schemagebunden. Daher kann jederzeit ein Synonym gelöscht werden. Wenn ein Synonym fallengelassen wird, besteht jedoch das Risiko, dass verbliebene Verweise auf das entfernte Synonym unvollständig oder obsolet werden. Diese Verweise werden nur zur Laufzeit gefunden.

Synonyme und Schemas

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

Erteilen von Berechtigungen für ein Synonym

Nur Synonymbesitzer, Mitglieder von db_owner oder Mitglieder von db_ddladmin können berechtigungen für ein Synonym erteilen.

Sie können alle oder eine der folgenden Berechtigungen für ein Synonym erteilen, verweigern, widerrufen:

Kontrolle Löschen
AUSFÜHREN Einfügen
AUSWÄHLEN VERANTWORTUNG ÜBERNEHMEN
Aktualisierung Darstellungsdefinition

Verwenden von Synonymen

Sie können Synonyme anstelle des referenzierten Basisobjekts in mehreren SQL-Anweisungen und Ausdruckskontexten verwenden. Die folgende Tabelle enthält eine Liste dieser Anweisungen und Ausdruckskontexte:

AUSWÄHLEN Einfügen
Aktualisierung Löschen
AUSFÜHREN Unterauswahlen

Wenn Sie mit Synonymen in den zuvor angegebenen Kontexten arbeiten, ist das Basisobjekt betroffen. Wenn beispielsweise ein Synonym auf ein Basisobjekt verweist, das eine Tabelle ist und Sie eine Zeile in das Synonym einfügen, fügen Sie tatsächlich eine Zeile in die referenzierte Tabelle ein.

Hinweis

Sie können nicht auf ein Synonym verweisen, das sich auf einem verknüpften Server befindet.

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

Sie können nicht auf ein Synonym in einer DDL-Anweisung verweisen. Beispielsweise generieren die folgenden Anweisungen, die auf ein Synonym mit dem Namen dbo.MyProductverweisen, Fehler:

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

Die folgenden Berechtigungsanweisungen sind nur dem Synonym und nicht dem Basisobjekt zugeordnet:

GEWÄHREN LEUGNEN
WIDERRUFEN

Synonyme sind nicht schemagebunden und können daher nicht durch die folgenden schemagebundenen Ausdruckskontexte referenziert werden:

CHECK-Einschränkungen Berechnete Spalten
Standardausdrücke Regelausdrücke
Schemagebundene Ansichten Schemagebundene Funktionen

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

Abrufen von Informationen zu Synonymen

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

Mithilfe erweiterter Eigenschaften können Sie beschreibenden oder anweisenden Text, Eingabemasken und Formatierungsregeln als Eigenschaften von Synonymen hinzufügen. Da die Eigenschaft in der Datenbank gespeichert ist, 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 finden. Weitere Informationen finden Sie unter OBJECTPROPERTYEX (Transact-SQL).

Beispiele

Im folgenden Beispiel wird der Basistyp des Basisobjekts eines Synonyms zurückgegeben, das ein lokales Objekt ist.

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

Im folgenden Beispiel wird der Basistyp des Basisobjekts eines Synonyms zurückgegeben, bei dem es sich um ein Remoteobjekt handelt, das sich auf einem Server mit dem Namen Server1befindet.

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

Synonyme erstellen

CREATE SYNONYM (Transact-SQL)

DROP SYNONYM (Transact-SQL)