Usar sinónimos (motor de base de datos)

Puede utilizar sinónimos en lugar de sus objetos base a los que se hace referencia en varias instrucciones SQL y contextos de expresión. La siguiente tabla contiene una lista de estas instrucciones y contextos de expresiones:

SELECT

INSERT

UPDATE

DELETE

EXECUTE

Subselecciones

Al trabajar con sinónimos en los contextos indicados anteriormente, el objeto base se ve afectado. Por ejemplo, si un sinónimo hace referencia a un objeto base que es una tabla e inserta una fila en el sinónimo, realmente está insertando una fila en la tabla a la que se hace referencia.

Nota

No se puede hacer referencia a un sinónimo situado en un servidor vinculado.

Puede usar un sinónimo como parámetro para la función OBJECT_ID; sin embargo, la función devuelve el identificador de objeto del sinónimo y no el objeto base.

No puede hacer referencia a un sinónimo en una instrucción DDL. Por ejemplo, las instrucciones siguientes, que hacen referencia a un sinónimo denominado dbo.MyProduct, generan errores:

ALTER TABLE dbo.MyProduct
   ADD NewFlag int null;
EXEC ('ALTER TABLE dbo.MyProduct
   ADD NewFlag int null');

Las siguientes instrucciones de permisos sólo están asociadas al sinónimo, no al objeto base:

GRANT

DENY

REVOKE

 

Los sinónimos no están enlazados al esquema, por lo que los siguientes contextos de expresión enlazados al esquema no pueden hacer referencia a sinónimos:

Restricciones CHECK

Columnas calculadas

Expresiones predeterminadas

Expresiones de reglas

Vistas enlazadas a esquema

Funciones enlazadas a esquema

Para obtener más información acerca de las funciones enlazadas a esquema, vea Crear funciones definidas por el usuario (motor de base de datos).

Ejemplos

En el siguiente ejemplo se crea un sinónimo, que se utilizará en posteriores ejemplos.

USE tempdb;
GO
CREATE SYNONYM MyAddressType
FOR AdventureWorks2008R2.Person.AddressType;
GO

En el siguiente ejemplo se inserta una fila en la tabla base a la que hace referencia el sinónimo MyAddressType.

USE tempdb;
GO
INSERT INTO MyAddressType (Name)
VALUES ('Test');
GO

En el siguiente ejemplo se muestra cómo se puede hacer referencia a un sinónimo en SQL dinámica.

USE tempdb;
GO
EXECUTE ('SELECT Name FROM MyAddressType');
GO