Compartilhar via


CREATE SYNONYM (Transact-SQL)

Cria um novo sinônimo.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

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
}

Argumentos

  • schema_name_1
    Especifica o esquema no qual o sinônimo é criado. Se schema não for especificado, o SQL Server usará o esquema padrão do usuário atual.

  • synonym_name
    É o nome do novo sinônimo.

  • server_name
    É o nome do servidor no qual o objeto base está localizado.

  • database_name
    É o nome do banco de dados no qual o objeto base está localizado. Se database_name não for especificado, será usado o nome do banco de dados atual.

  • schema_name_2
    É o nome do esquema do objeto base. Se schema_name não for especificado, será usado o esquema padrão do usuário atual.

  • object_name
    É o nome do objeto base que o sinônimo referencia.

Comentários

O objeto base não precisa existir no momento da criação do sinônimo. O SQL Server verifica a existência desse objeto em tempo de execução.

Podem ser criados sinônimos para os seguintes tipos de objetos:

Procedimento armazenado de assembly (CLR)

Função com valor de tabela de assembly (CLR)

Função escalar de assembly (CLR)

Funções de agregação de assembly (CLR)

Procedimento de filtro de replicação

Procedimento armazenado estendido

Função escalar SQL

Função com valor de tabela SQL

Função com valor de tabela embutida SQL

Procedimento armazenado SQL

Exibição

Tabela1 (definida pelo usuário)

1 Inclui tabelas temporárias locais e globais

Não há suporte para nomes de quatro partes para objetos base.

É possível criar, descartar e referenciar sinônimos em SQL dinâmico.

Permissões

Para criar um sinônimo em um determinado esquema, o usuário deve ter a permissão CREATE SYNONYM e ser proprietário do esquema ou ter a permissão ALTER SCHEMA.

A permissão CREATE SYNONYM pode ser concedida.

ObservaçãoObservação

Você não precisa de permissão no objeto base para compilar a instrução CREATE SYNONYM, pois toda a verificação de permissão no objeto base é adiada até o tempo de execução.

Exemplos

A. Criando um sinônimo para um objeto local

O exemplo a seguir cria um sinônimo para o objeto base, Product no banco de dados AdventureWorks2008R2, e, em seguida, consulta o sinônimo.

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

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

Aqui está o conjunto de resultados.

-----------------------

ProductID Name

----------- --------------------------

1 Adjustable Race

2 Bearing Ball

3 BB Ball Bearing

4 Headset Ball Bearings

(4 row(s) affected)

B. Criando um sinônimo para objeto remoto

No exemplo a seguir, o objeto base, Contact, reside em um servidor remoto denominado Server_Remote.

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

C. Criando um sinônimo para uma função definida pelo usuário

O exemplo a seguir cria uma função chamada dbo.OrderDozen que aumenta o pedido para uma quantidade regular de doze unidades. Em seguida, o exemplo cria o sinônimo dbo.CorrectOrder para a função dbo.OrderDozen.

-- 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