Delen via


Synoniemen (Database-engine)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-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  

Synoniemen maken
SYNONIEM MAKEN (Transact-SQL)
DROP SYNONIEM (Transact-SQL)