Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
En synonym är ett databasobjekt som har följande syften:
Tillhandahåller ett alternativt namn för ett annat databasobjekt, som kallas för basobjektet, som kan finnas på en lokal server eller fjärrserver.
Innehåller ett abstraktionslager som skyddar ett klientprogram från ändringar som gjorts i basobjektets namn eller plats.
Tänk dig till exempel tabellen Employee i Adventure Works, som finns på en server med namnet Server1. Om du vill referera till den här tabellen från en annan server, Server2, måste ett klientprogram använda det fyrdelade namnet Server1.AdventureWorks.Person.Employee. Om tabellens plats skulle ändras, till exempel till en annan server, måste klientprogrammet ändras för att återspegla ändringen.
För att lösa båda dessa problem kan du skapa en synonym, EmpTable i ett dedikerat eller befintligt schema, RemoteObjects, på Server2 för tabellen Employee på Server1. Nu behöver klientprogrammet bara använda tvådelade namn, RemoteObjects.EmpTable, för att referera till tabellen Employee Server1. Om platsen för tabellen Anställd ändras måste du också ändra synonymen EmpTable för att peka på den nya platsen för tabellen Anställd . Eftersom det inte finns någon ALTER SYNONYM-instruktion måste du först släppa synonymen RemoteObjects.EmpTable och sedan återskapa synonymen med samma namn, men nu peka synonymen till den nya platsen för tabellen Employee .
En synonym tillhör ett schema, och precis som andra objekt i ett schema måste namnet på en synonym vara unikt. Du kan skapa synonymer för följande databasobjekt:
Lagrad procedur för sammansättning (CLR)
Skalär sammansättningsfunktion (CLR)
Replikeringsfilterprocedur
SQL-skalärfunktion
SQL inline-tabled-valued-funktion
View
Tabellvärdesfunktion för sammansättning (CLR)
Sammansättningsfunktioner (CLR)
SQL-tabellvärdesfunktion
SQL-lagrad procedur
Tabell* (användardefinierad)
*Innehåller lokala och globala temporära tabeller
Anmärkning
Fyradelade namn för funktionsbasobjekt stöds inte.
En synonym kan inte vara basobjektet för en annan synonym och en synonym kan inte referera till en användardefinierad mängdfunktion.
Bindningen mellan en synonym och dess basobjekt är endast med namn. All kontroll av existens, typ och behörigheter för basobjektet skjuts upp till körningstiden. Därför kan basobjektet ändras, tas bort eller tas bort och ersättas av ett annat objekt som har samma namn som det ursprungliga basobjektet. Tänk dig till exempel en synonym, dbo. MyContacts, som refererar till tabellen Person.Contact i Adventure Works. Om tabellen Kontakt tas bort och ersätts av en vy med namnet Person.Contactrefererar MyContacts nu till vyn Person.Contact .
Referenser till synonymer är inte schemabundna. Därför kan en synonym tas bort när som helst. Men genom att släppa en synonym riskerar du att lämna dinglande referenser till synonymen som togs bort. Dessa referenser hittas endast vid körning.
Synonymer och scheman
Om du har ett standardschema som du inte äger och vill skapa en synonym måste du kvalificera synonymnamnet med namnet på ett schema som du äger. Om du till exempel äger ett schema S1, men S2 är standardschemat och du använder instruktionen CREATE SYNONYM, måste du prefixa namnet på synonymen med schemat S1, i stället för att namnge synonymen med hjälp av ett endelsnamn. Mer information om hur du skapar synonymer finns i CREATE SYNONYM (Transact-SQL).
Bevilja behörigheter för en synonym
Endast synonymägare, medlemmar i db_owner eller medlemmar i db_ddladmin kan bevilja behörighet för en synonym.
Du kan GRANT, DENY, och REVOKE alla eller någon av följande behörigheter för en synonym:
KONTROLL
EXECUTE
SELECT
UPPDATERING
DELETE
INSERT
TA ÄGARSKAP
VISA DEFINITION
Använda synonymer
Du kan använda synonymer i stället för deras refererade basobjekt i flera SQL-uttrycks- och uttryckskontexter. Följande kolumner innehåller en lista över dessa uttrycks- och uttryckskontexter:
SELECT
UPPDATERING
EXECUTE
INSERT
DELETE
Underfrågor
När du arbetar med synonymer i tidigare angivna kontexter påverkas basobjektet. Om en synonym till exempel refererar till ett basobjekt som är en tabell och du infogar en rad i synonymen, infogar du faktiskt en rad i den refererade tabellen.
Anmärkning
Du kan inte referera till en synonym som finns på en länkad server.
Du kan använda en synonym som parameter för funktionen OBJECT_ID. Funktionen returnerar dock objekt-ID för synonymen, inte basobjektet.
Du kan inte referera till en synonym i en DDL-instruktion. Följande instruktioner, som refererar till en synonym med namnet dbo.MyProduct, genererar till exempel fel:
ALTER TABLE dbo.MyProduct
ADD NewFlag int null;
EXEC ('ALTER TABLE dbo.MyProduct
ADD NewFlag int null');
Följande behörighetsuttryck är endast associerade med synonymen och inte basobjektet:
GRANT
REVOKE
DENY
Synonymer är inte schemabundna och kan därför inte refereras till av följande schemabundna uttryckskontexter:
CHECK-begränsningar
Standarduttryck
Schemabundna vyer
Beräknade kolumner
Regeluttryck
Schemabundna funktioner
Mer information om schemabundna funktioner finns i Skapa användardefinierade funktioner (databasmotor).
Hämta information om synonymer
Katalogvyn sys.synonyms innehåller en post för varje synonym i en viss databas. Den här katalogvyn exponerar synonymmetadata, till exempel namnet på synonymen och namnet på basobjektet. Mer information finns i sys.synonyms (Transact-SQL).
Genom att använda utökade egenskaper kan du lägga till beskrivande text eller instruktionstext, indatamasker och formateringsregler som egenskaper för en synonym. Eftersom egenskapen lagras i databasen kan alla program som läser egenskapen utvärdera objektet på samma sätt. Mer information finns i sp_addextendedproperty (Transact-SQL).
Om du vill hitta bastypen för basobjektet för en synonym använder du funktionen OBJECTPROPERTYEX. Mer information finns i OBJECTPROPERTYEX (Transact-SQL).
Examples
I följande exempel returneras bastypen för en synonyms basobjekt som är ett lokalt objekt.
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;
I följande exempel returneras bastypen för en synonyms basobjekt som är ett fjärrobjekt som finns på en server med namnet 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
Relaterat innehåll
Skapa synonymer
SKAPA SYNONYM (Transact-SQL)
SLÄPP SYNONYM (Transact-SQL)