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 AdventureWorks.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
Vea también