CREATE SYNONYM (Transact-SQL)
Crea un nuevo sinónimo.
Convenciones 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.
Comentarios
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 AdventureWorks2012 y, después, se consulta el sinónimo.
USE tempdb;
GO
-- Create a synonym for the Product table in AdventureWorks2012.
CREATE SYNONYM MyProduct
FOR AdventureWorks2012.Production.Product;
GO
-- Query the Product table by using the synonym.
USE tempdb;
GO
SELECT ProductID, Name
FROM MyProduct
WHERE ProductID < 5;
GO
El conjunto de resultados es el siguiente.
-----------------------
ProductID Name
----------- --------------------------
1 Adjustable Race
2 Bearing Ball
3 BB Ball Bearing
4 Headset Ball Bearings
(4 row(s) affected)
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.AdventureWorks2012.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