Verwenden von Synonymen (Datenbankmodul)
Synonyme können anstelle des Basisobjekts, auf das verwiesen wird, in mehreren SQL-Anweisungen und Ausdruckskontexten verwendet werden. Die folgende Tabelle enthält eine Liste dieser Anweisungen und Ausdruckskontexte:
SELECT |
INSERT |
UPDATE |
DELETE |
EXECUTE |
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.MyProduct verweisen, 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 |
DENY |
REVOKE |
|
Synonyme sind nicht schemagebunden. Deshalb kann von den folgenden schemagebundenen Ausdruckskontexten nicht auf Synonyme verwiesen werden:
CHECK-Einschränkungen |
Berechnete Spalten |
Standardausdrücke |
Regelausdrücke |
Schemagebundene Sichten |
Schemagebundene Funktionen |
Weitere Informationen zu schemagebundenen Funktionen finden Sie unter Erstellen von benutzerdefinierten Funktionen (Datenbankmodul).
Beispiele
Im folgenden Beispiel wird ein Synonym erstellt, das in nachfolgenden Beispielen verwendet wird.
USE tempdb;
GO
CREATE SYNONYM MyAddressType
FOR AdventureWorks2008R2.Person.AddressType;
GO
Das folgende Beispiel fügt eine Zeile in die Basistabelle ein, auf die vom MyAddressType-Synonym verwiesen wird.
USE tempdb;
GO
INSERT INTO MyAddressType (Name)
VALUES ('Test');
GO
Das folgende Beispiel veranschaulicht, wie in dynamischem SQL auf ein Synonym verwiesen werden kann.
USE tempdb;
GO
EXECUTE ('SELECT Name FROM MyAddressType');
GO
Siehe auch