Dela via


SKAPA SYNONYM (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Förhandsversion av Microsoft Fabric

Skapar en ny synonym.

Transact-SQL syntaxkonventioner

Syntax

SQL Server-syntax:

CREATE SYNONYM [ schema_name_1. ] synonym_name FOR <object>

<object> ::=
{
    [
        server_name. [ database_name ] . [ schema_name_2 ] .
        | database_name. [ schema_name_2 ] .
        | schema_name_2.
    ]
    object_name
}

Azure SQL Database och SQL Database i Förhandsversionssyntax för Microsoft Fabric:

CREATE SYNONYM [ schema_name_1. ] synonym_name FOR <object>

<object> ::=
{
    [ database_name. [ schema_name_2 ] . | schema_name_2. ] object_name
}

Arguments

schema_name_1

Anger det schema där synonymen skapas. Om schema_name inte anges använder SQL Server den aktuella användarens standardschema.

synonym_name

Namnet på den nya synonymen.

server_name

Namnet på servern där basobjektet finns.

database_name

Namnet på databasen där basobjektet finns. Om database_name inte anges används namnet på den aktuella databasen.

schema_name_2

Namnet på schemat för basobjektet. Om schema_name inte anges används standardschemat för den aktuella användaren.

object_name

Namnet på basobjektet som synonymen refererar till.

Anmärkning

Azure SQL Database och SQL Database i Microsoft Fabric Preview har stöd för namnformatet database_name.[schema_name].object_name i tre delar när database_name är den aktuella databasen, eller database_name är tempdb och object_name börjar med #.

Anmärkningar

Basobjektet behöver inte finnas när synonymen skapas. SQL Server söker efter förekomsten av basobjektet vid körning.

  • Synonymer kan skapas för följande typer av objekt:

    • Lagrad procedur för sammansättning (CLR)
    • Tabellvärdesfunktion för sammansättning (CLR)
    • Skalär sammansättningsfunktion (CLR)
    • Sammansättningsfunktioner (CLR)
    • Replikeringsfilterprocedur
    • Utökad lagrad procedur
    • T-SQL-skalär funktion
    • T-SQL-tabellvärdesfunktion
    • Funktionen T-SQL inline-table-valued
    • Lagrad T-SQL-procedur
    • Tabell (användardefinierad, innehåller lokala och globala temporära tabeller)
    • View
  • Fyradelade namn för funktionsbasobjekt stöds inte.

  • Synonymer kan skapas, tas bort och refereras till i dynamisk T-SQL.

  • Synonymer är databasspecifika och kan inte nås av andra databaser.

Permissions

Om du vill skapa en synonym i ett visst schema måste en användare ha CREATE SYNONYM behörighet och antingen äga schemat eller ha ALTER SCHEMA behörighet.

Behörigheten CREATE SYNONYM är en behörighet som kan beviljas.

Anmärkning

Du behöver inte behörighet för basobjektet för att kompilera -instruktionen CREATE SYNONYM , eftersom all behörighetskontroll av basobjektet skjuts upp till körningstiden.

Examples

A. Skapa en synonym för ett lokalt objekt

I följande exempel skapas först en synonym för basobjektet i ProductAdventureWorks2022 databasen och frågar sedan synonymen.

-- Create a synonym for the Product table in AdventureWorks2022.
CREATE SYNONYM MyProduct
FOR AdventureWorks2022.Production.Product;
GO

-- Query the Product table by using the synonym.
SELECT ProductID, Name
FROM MyProduct
WHERE ProductID < 5;
GO

Här är resultatet.

ProductID   Name
----------- --------------------------
1           Adjustable Race
2           Bearing Ball
3           BB Ball Bearing
4           Headset Ball Bearings

(4 row(s) affected)

B. Skapa en synonym till fjärrobjekt

I följande exempel finns basobjektet , Contactpå en fjärrserver med namnet Server_Remote.

EXEC sp_addlinkedserver Server_Remote;
GO
USE tempdb;
GO
CREATE SYNONYM MyEmployee FOR Server_Remote.AdventureWorks2022.HumanResources.Employee;
GO

C. Skapa en synonym för en användardefinierad funktion

I följande exempel skapas en funktion med namnet dbo.OrderDozen som ökar orderbeloppen till 12 enheter. Exemplet skapar sedan synonymen dbo.CorrectOrderdbo.OrderDozen för funktionen.

-- Creating the dbo.OrderDozen function
CREATE FUNCTION dbo.OrderDozen (@OrderAmt INT)
RETURNS INT
    WITH EXECUTE AS CALLER
AS
BEGIN
    IF @OrderAmt % 12 <> 0
    BEGIN
        SET @OrderAmt += 12 - (@OrderAmt % 12)
    END

    RETURN (@OrderAmt);
END;
GO

-- Using the dbo.OrderDozen function
DECLARE @Amt INT;

SET @Amt = 15;

SELECT @Amt AS OriginalOrder,
    dbo.OrderDozen(@Amt) AS ModifiedOrder;

-- Create a synonym dbo.CorrectOrder for the dbo.OrderDozen function.
CREATE SYNONYM dbo.CorrectOrder
FOR dbo.OrderDozen;
GO

-- Using the dbo.CorrectOrder synonym.
DECLARE @Amt INT;

SET @Amt = 15;

SELECT
    @Amt AS OriginalOrder,
    dbo.CorrectOrder(@Amt) AS ModifiedOrder;

Nästa steg