Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-database in Microsoft Fabric
Een synoniem is een databaseobject dat de volgende doeleinden dient:
Biedt een alternatieve naam voor een ander databaseobject, aangeduid als het basisobject, dat kan bestaan op een lokale of externe server.
Biedt een abstractielaag waarmee een clienttoepassing wordt beschermd tegen wijzigingen die zijn aangebracht in de naam of locatie van het basisobject.
Denk bijvoorbeeld aan de tabel Werknemer van Adventure Works op een server met de naam Server1. Als u naar deze tabel wilt verwijzen vanaf een andere server, Server2, moet een clienttoepassing de vierdelige naam Server1.AdventureWorks.Person.Employee gebruiken. Als de locatie van de tabel bijvoorbeeld naar een andere server zou worden gewijzigd, moet de clienttoepassing ook worden gewijzigd om die wijziging weer te geven.
Als u beide problemen wilt oplossen, kunt u een synoniem, EmpTable maken in een toegewezen of bestaand schema, RemoteObjects, op Server2 voor de tabel Werknemer op Server1. De clienttoepassing hoeft nu alleen de tweedelige naam RemoteObjects.EmpTable te gebruiken om te verwijzen naar de tabel Werknemer server1. Als de locatie van de tabel Werknemer wordt gewijzigd, moet u ook het synoniem EmpTable wijzigen om naar de nieuwe locatie van de tabel Werknemer te verwijzen. Omdat er geen ALTER SYNONYM-instructie is, moet u eerst het synoniem RemoteObjects.EmpTable verwijderen en vervolgens het synoniem met dezelfde naam opnieuw maken, maar nu wijst u het synoniem aan op de nieuwe locatie van de tabel Werknemer .
Een synoniem hoort bij een schema en net als andere objecten in een schema moet de naam van een synoniem uniek zijn. U kunt synoniemen maken voor de volgende databaseobjecten:
Opgeslagen procedure voor assembly (CLR)
Scalaire functie (CLR) assembly
Replicatiefilterprocedure
Scalaire SQL-functie
Inline-tabelwaarde-functie van SQL
Bekijk
Clr-functie (Assembly) met tabelwaarde
Statistische functies van ASSEMBLY (CLR)
Sql-tabelwaardefunctie
Opgeslagen SQL-procedure
Tabel* (door de gebruiker gedefinieerd)
*Bevat lokale en globale tijdelijke tabellen
Opmerking
Vierdelige namen voor functiebasisobjecten worden niet ondersteund.
Een synoniem kan niet het basisobject zijn voor een ander synoniem en een synoniem kan niet verwijzen naar een door de gebruiker gedefinieerde statistische functie.
De binding tussen een synoniem en het basisobject is alleen op naam. Alle aanwezigheids-, type- en machtigingencontrole op het basisobject wordt uitgesteld tot de uitvoeringstijd. Daarom kan het basisobject worden gewijzigd, verwijderd of verwijderd en vervangen door een ander object met dezelfde naam als het oorspronkelijke basisobject. Denk bijvoorbeeld aan een synoniem, dbo. MyContacts, die verwijst naar de tabel Person.Contact in Adventure Works. Als de tabel Contactpersoon wordt verwijderd en vervangen door een weergave met de naam Person.Contact, verwijst MyContacts nu naar de weergave Person.Contact .
Verwijzingen naar synoniemen zijn niet schemagebonden. Daarom kan een synoniem op elk gewenst moment worden verwijderd. Door echter een synoniem te verwijderen, loopt u het risico om zwevende verwijzingen naar het synoniem te laten vallen dat is verwijderd. Deze verwijzingen worden alleen tijdens runtime gevonden.
Synoniemen en schema's
Als u een standaardschema hebt dat u niet bezit en een synoniem wilt maken, moet u de synoniemennaam kwalificeren met de naam van een schema waarvan u eigenaar bent. Als u bijvoorbeeld eigenaar bent van een schema S1, maar S2 het standaardschema is en u de instructie CREATE SYNONYM gebruikt, moet u de naam van het synoniem vooraf laten gaan aan het schema S1, in plaats van het synoniem een naam te geven met behulp van een enkele naam. Zie CREATE SYNONYM (Transact-SQL)voor meer informatie over het maken van synoniemen.
Machtigingen verlenen voor een synoniem
Alleen synoniemeneigenaars, leden van db_owner of leden van db_ddladmin kunnen machtigingen verlenen voor een synoniem.
U kunt GRANT, DENYen REVOKE alle of een van de volgende machtigingen voor een synoniem:
CONTROLE
EXECUTE
SELECT
UPDATE
Verwijderen
INSERT
EIGENAARSCHAP NEMEN
DEFINITIE WEERGEVEN
Synoniemen gebruiken
U kunt synoniemen gebruiken in plaats van het bijbehorende basisobject waarnaar wordt verwezen in verschillende SQL-instructies en expressiecontexten. De volgende kolommen bevatten een lijst met deze instructies en expressiecontexten:
SELECT
UPDATE
EXECUTE
INSERT
Verwijderen
Subselecties
Wanneer u werkt met synoniemen in de eerder genoemde contexten, wordt het basisobject beïnvloed. Als een synoniem bijvoorbeeld verwijst naar een basisobject dat een tabel is en u een rij invoegt in het synoniem, voegt u in feite een rij in de tabel waarnaar wordt verwezen in.
Opmerking
U kunt niet verwijzen naar een synoniem dat zich op een gekoppelde server bevindt.
U kunt een synoniem gebruiken als de parameter voor de OBJECT_ID functie; De functie retourneert echter de object-id van het synoniem, niet het basisobject.
U kunt niet verwijzen naar een synoniem in een DDL-instructie. De volgende instructies, die verwijzen naar een synoniem met de naam dbo.MyProduct, genereren bijvoorbeeld fouten:
ALTER TABLE dbo.MyProduct
ADD NewFlag int null;
EXEC ('ALTER TABLE dbo.MyProduct
ADD NewFlag int null');
De volgende machtigingsinstructies zijn alleen gekoppeld aan het synoniem en niet aan het basisobject:
GRANT
REVOKE
DENY
Synoniemen zijn niet schemagebonden en kunnen daarom niet worden verwezen naar de volgende contexten voor schemagebonden expressies:
CHECK-beperkingen
Standaardexpressies
Schemagebonden weergaven
Berekende kolommen
Regeluitdrukkingen
Schemagebonden functies
Zie Door de gebruiker gedefinieerde functies maken (Database Engine) voor meer informatie over schemagebonden functies.
Informatie ophalen over synoniemen
De sys.synonyms catalogusweergave bevat een vermelding voor elk synoniem in een bepaalde database. In deze catalogusweergave worden synoniemmetagegevens weergegeven, zoals de naam van het synoniem en de naam van het basisobject. Zie sys.synoniemen (Transact-SQL) voor meer informatie.
Met behulp van uitgebreide eigenschappen kunt u beschrijvende of instructietekst, invoermaskers en opmaakregels toevoegen als eigenschappen van een synoniem. Omdat de eigenschap is opgeslagen in de database, kunnen alle toepassingen die de eigenschap lezen het object op dezelfde manier evalueren. Zie sp_addextendedproperty (Transact-SQL) voor meer informatie.
Gebruik de functie OBJECTPROPERTYEX om het basistype van het basisobject van een synoniem te vinden. Zie OBJECTPROPERTYEX (Transact-SQL) voor meer informatie.
Voorbeelden
In het volgende voorbeeld wordt het basistype van een basisobject van een synoniem geretourneerd dat een lokaal object is.
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;
In het volgende voorbeeld wordt het basistype van een basisobject van een synoniem geretourneerd dat een extern object is dat zich op een server bevindt met de naam Server1.
EXECUTE sp_addlinkedserver Server1;
GO
CREATE SYNONYM SynSchema.MyRemoteEmployee
FOR Server1.AdventureWorks2022.HumanResources.Employee;
GO
SELECT OBJECTPROPERTYEX(OBJECT_ID('MyRemoteEmployee'), 'BaseType') AS BaseType;
GO
Verwante inhoud
Synoniemen maken
SYNONIEM MAKEN (Transact-SQL)
DROP SYNONIEM (Transact-SQL)