CREATE SYNONYM (Transact-SQL)

Crea un nuevo sinónimo.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

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 el esquema en el que se crea el sinónimo. Si no se especifica schema, SQL Server utiliza el esquema predeterminado del usuario actual.

  • synonym_name
    Es el nombre del nuevo sinónimo.

  • server_name
    Es el nombre del servidor donde se encuentra el objeto base.

  • database_name
    Es el nombre de la base de datos donde se encuentra el objeto base. Si no se especifica database_name, se utiliza el nombre de la base de datos actual.

  • schema_name_2
    Es el nombre del esquema del objeto base. Si no se especifica schema_name, se utiliza el esquema predeterminado del usuario actual.

  • object_name
    Es el nombre del objeto base al que hace referencia el sinónimo.

Notas

No es necesario que el objeto base exista en el momento de crear el sinónimo. SQL Server comprueba la existencia del objeto base en tiempo de ejecución.

Se pueden crear sinónimos para los siguientes tipos de objetos:

Procedimiento almacenado del ensamblado (CLR)

Función con valores de tabla del ensamblado (CLR)

Función escalar del ensamblado (CLR)

Funciones de agregado del ensamblado (CLR)

Procedimiento de filtro de replicación

Procedimiento almacenado extendido

Función escalar de SQL

Función SQL con valores de tabla

Función SQL con valores de tabla insertados

Procedimiento almacenado de SQL

Vista

Tabla1 (definida por el usuario)

1 Incluye tablas temporales locales y globales

No pueden usarse nombres de cuatro partes para objetos base de función.

Es posible crear, quitar y hacer referencia a sinónimos en SQL dinámico.

Permisos

Para crear un sinónimo en un esquema determinado, el usuario debe tener el permiso CREATE SYNONYM y ser propietario del esquema o tener el permiso ALTER SCHEMA.

El permiso CREATE SYNONYM se puede conceder.

[!NOTA]

No se necesitan permisos en el objeto base para compilar correctamente la instrucción CREATE SYNONYM, porque la comprobación de los permisos para el objeto base no se realiza hasta el momento de la ejecución.

Ejemplos

A. Crear un sinónimo para un objeto local

En el ejemplo siguiente, primero se crea un sinónimo para el objeto base (Product) en la base de datos AdventureWorks y, después, se consulta el sinónimo.

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

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

Éste es el conjunto de resultados.

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

ProductID Name

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

1 Adjustable Race

2 Bearing Ball

3 BB Ball Bearing

4 Headset Ball Bearings

(4 filas afectadas)

B. Crear un sinónimo de un objeto remoto

En el ejemplo siguiente, el objeto base (Contact) reside en un servidor remoto denominado Server_Remote.

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

C. Crear un sinónimo para una función definida por el usuario

En el ejemplo siguiente, se crea una función denominada dbo.OrderDozen que aumenta los pedidos a una cantidad uniforme de doce unidades. A continuación, en el ejemplo se crea el sinónimo dbo.CorrectOrder para la función 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