Usar sinónimos (motor de base de datos)Synonyms (Database Engine)

Un sinónimo es un objeto de base de datos que sirve para los siguientes objetivos:A synonym is a database object that serves the following purposes:

  • Proporciona un nombre alternativo para otro objeto de base de datos, denominado objeto base, que puede existir en un servidor local o remoto.Provides an alternative name for another database object, referred to as the base object, that can exist on a local or remote server.

  • Proporciona una capa de abstracción que protege una aplicación cliente de cambios realizados en el nombre o la ubicación del objeto base.Provides a layer of abstraction that protects a client application from changes made to the name or location of the base object.

    Por ejemplo, suponga la tabla Employee de Adventure WorksAdventure Works, situada en un servidor denominado Server1.For example, consider the Employee table of Adventure WorksAdventure Works, located on a server named Server1. Para hacer referencia a esta tabla desde otro servidor, Server2, una aplicación cliente tendría que usar el nombre de cuatro partes Server1.AdventureWorks.Person.Employee.To reference this table from another server, Server2, a client application would have to use the four-part name Server1.AdventureWorks.Person.Employee. Además, si la ubicación de la tabla cambiara, por ejemplo a otro servidor, la aplicación cliente debería modificarse para reflejar ese cambio.Also, if the location of the table were to change, for example, to another server, the client application would have to be modified to reflect that change.

    Para solucionar ambas cosas, puede crear un sinónimo, EmpTable, en Server2 para la tabla Employee en Server1.To address both these issues, you can create a synonym, EmpTable, on Server2 for the Employee table on Server1. Ahora la aplicación cliente solo tiene que usar el nombre de una parte, EmpTable, para hacer referencia a la tabla Employee .Now, the client application only has to use the single-part name, EmpTable, to reference the Employee table. Además, si la ubicación de la tabla Employee cambia, tendrá que modificar el sinónimo, EmpTable, para que apunte a la nueva ubicación de la tabla Employee .Also, if the location of the Employee table changes, you will have to modify the synonym, EmpTable, to point to the new location of the Employee table. Puesto que no hay ninguna instrucción ALTER SYNONYM, primero tiene que quitar el sinónimo, EmpTabley, luego, volver a crearlo con el mismo nombre, pero apuntando a la nueva ubicación de Employee.Because there is no ALTER SYNONYM statement, you first have to drop the synonym, EmpTable, and then re-create the synonym with the same name, but point the synonym to the new location of Employee.

    Un sinónimo pertenece a un esquema y, al igual que otros objetos de un esquema, el nombre de un sinónimo debe ser único.A synonym belongs to a schema, and like other objects in a schema, the name of a synonym must be unique. Puede crear sinónimos para los siguientes objetos de base de datos:You can create synonyms for the following database objects:

Procedimiento almacenado del ensamblado (CLR)Assembly (CLR) stored procedure Función con valores de tabla del ensamblado (CLR)Assembly (CLR) table-valued function
Función escalar del ensamblado (CLR)Assembly (CLR) scalar function Función de agregado del ensamblado (CLR)Assembly (CLR) aggregate functions
Procedimiento de filtro de replicaciónReplication-filter-procedure Procedimiento almacenado extendidoExtended stored procedure
Función escalar de SQLSQL scalar function Función con valores de tabla de SQLSQL table-valued function
Función SQL insertada con valores de tablaSQL inline-tabled-valued function Procedimiento almacenado de SQLSQL stored procedure
VerView Tabla* (definida por el usuario)Table* (User-defined)

Incluye tablas temporales locales y globalesIncludes local and global temporary tables

Nota

No pueden usarse nombres de cuatro partes para objetos base de función.Four-part names for function base objects are not supported.

Un sinónimo no puede ser el objeto base de otro sinónimo y un sinónimo no puede hacer referencia a una función de agregado definida por el usuario.A synonym cannot be the base object for another synonym, and a synonym cannot reference a user-defined aggregate function.

El enlace entre un sinónimo y su objeto base solo es mediante el nombre.The binding between a synonym and its base object is by name only. Todas las comprobaciones de existencia, tipo y permisos en el objeto base se posponen hasta la ejecución.All existence, type, and permissions checking on the base object is deferred until run time. Por tanto, el objeto base puede modificarse, quitarse o quitarse y reemplazarse por otro objeto con el mismo nombre que el objeto base original.Therefore, the base object can be modified, dropped, or dropped and replaced by another object that has the same name as the original base object. Por ejemplo, suponga un sinónimo, MyContacts, que hace referencia a la tabla Person.Contact de Adventure WorksAdventure Works.For example, consider a synonym, MyContacts, that references the Person.Contact table in Adventure WorksAdventure Works. Si la tabla Contact se quita y reemplaza por una vista llamada Person.Contact, MyContacts ahora hace referencia a la vista Person.Contact .If the Contact table is dropped and replaced by a view named Person.Contact, MyContacts now references the Person.Contact view.

Las referencias a sinónimos no están enlazadas a esquema.References to synonyms are not schema-bound. Por tanto, un sinónimo puede quitarse en cualquier momento.Therefore, a synonym can be dropped at any time. Sin embargo, al quitar un sinónimo se corre el riesgo de dejar referencias pendientes al sinónimo quitado.However, by dropping a synonym, you run the risk of leaving dangling references to the synonym that was dropped. Estas referencias solo se encontrarán en tiempo de ejecución.These references will only be found at run time.

Sinónimos y esquemasSynonyms and Schemas

Si tiene un esquema predeterminado que no posee y desea crear un sinónimo, debe calificar el nombre del sinónimo con el nombre de un esquema que posea.If you have a default schema that you do not own and want to create a synonym, you must qualify the synonym name with the name of a schema that you do own. Por ejemplo, si posee un esquema x, pero y es su esquema predeterminado y usa la instrucción CREATE SYNONYM, debe poner un prefijo al nombre del sinónimo con el esquema x, en lugar de asignar un nombre al sinónimo mediante un nombre con una sola parte.For example, if you own a schema x, but y is your default schema and you use the CREATE SYNONYM statement, you must prefix the name of the synonym with the schema x, instead of naming the synonym by using a single-part name. Para obtener más información sobre cómo crear sinónimos, vea CREATE SYNONYM (Transact-SQL).For more information about how to create synonyms, see CREATE SYNONYM (Transact-SQL).

Conceder permisos para un sinónimoGranting Permissions on a Synonym

Solo los propietarios de los sinónimos, miembros de db_ownero miembros de db_ddladmin pueden conceder permiso para un sinónimo.Only synonym owners, members of db_owner, or members of db_ddladmin can grant permission on a synonym.

Puede conceder (GRANT), denegar (DENY) o revocar (REVOKE) todos o cualquiera de los siguientes permisos para un sinónimo:You can GRANT, DENY, REVOKE all or any of the following permissions on a synonym:

CONTROLCONTROL DELETEDELETE
EXECUTEEXECUTE INSERTINSERT
SELECTSELECT TAKE OWNERSHIPTAKE OWNERSHIP
UPDATEUPDATE VIEW DEFINITIONVIEW DEFINITION

Usar sinónimosUsing Synonyms

Puede usar sinónimos en lugar de los objetos base a los que se hace referencia en varias instrucciones SQL y contextos de expresión.You can use synonyms in place of their referenced base object in several SQL statements and expression contexts. La siguiente tabla contiene una lista de estas instrucciones y contextos de expresiones:The following table contains a list of these statements and expression contexts:

SELECTSELECT INSERTINSERT
UPDATEUPDATE DELETEDELETE
EXECUTEEXECUTE SubseleccionesSub-selects

Al trabajar con sinónimos en los contextos indicados anteriormente, el objeto base se ve afectado.When you are working with synonyms in the contexts previously stated, the base object is affected. 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.For example, if a synonym references a base object that is a table and you insert a row into the synonym, you are actually inserting a row into the referenced table.

Nota

No se puede hacer referencia a un sinónimo situado en un servidor vinculado.You cannot reference a synonym that is located on a linked server.

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.You can use a synonym as the parameter for the OBJECT_ID function; however, the function returns the object ID of the synonym, not the base object.

No puede hacer referencia a un sinónimo en una instrucción DDL.You cannot reference a synonym in a DDL statement. Por ejemplo, las instrucciones siguientes, que hacen referencia a un sinónimo denominado dbo.MyProduct, generan errores:For example, the following statements, which reference a synonym named dbo.MyProduct, generate errors:

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

Las siguientes instrucciones de permisos solo están asociadas al sinónimo, no al objeto base:The following permission statements are associated only with the synonym and not the base object:

GRANTGRANT DENYDENY
REVOKEREVOKE

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:Synonyms are not schema-bound and, therefore, cannot be referenced by the following schema-bound expression contexts:

CHECK, restriccionesCHECK constraints Columnas calculadasComputed columns
Expresiones predeterminadasDefault expressions Expresiones de reglasRule expressions
Vistas enlazadas a esquemaSchema-bound views Funciones enlazadas a esquemaSchema-bound functions

Para obtener más información sobre las funciones enlazadas a esquema, vea Crear funciones definidas por el usuario (motor de base de datos).For more information about schema-bound functions, see Create User-defined Functions (Database Engine).

Obtener información acerca de sinónimosGetting Information About Synonyms

La vista de catálogo sys.synonyms contiene una entrada para cada sinónimo de una base de datos determinada.The sys.synonyms catalog view contains an entry for each synonym in a given database. Esta vista de catálogo expone metadatos de sinónimos, como el nombre del sinónimo y el nombre del objeto base.This catalog view exposes synonym metadata such as the name of the synonym and the name of the base object. Para obtener más información sobre la vista de catálogo sys.synonyms, vea sys.synonyms (Transact-SQL).For more information about the sys.synonyms catalog view, see sys.synonyms (Transact-SQL).

Mediante las propiedades extendidas, puede agregar texto descriptivo o instrucciones, máscaras de entrada y reglas de formato como propiedades de un sinónimo.By using extended properties, you can add descriptive or instructional text, input masks, and formatting rules as properties of a synonym. Puesto que la propiedad se almacena en la base de datos, todas las aplicaciones que leen la propiedad pueden evaluar el objeto de la misma manera.Because the property is stored in the database, all applications that read the property can evaluate the object in the same way. Para obtener más información, vea sp_addextendedproperty (Transact-SQL).For more information, see sp_addextendedproperty (Transact-SQL).

Para buscar el tipo base del objeto base de un sinónimo, utilice la función OBJECTPROPERTYEX.To find the base type of the base object of a synonym, use the OBJECTPROPERTYEX function. Para obtener más información, vea OBJECTPROPERTYEX (Transact-SQL).For more information, see OBJECTPROPERTYEX (Transact-SQL).

EjemplosExamples

En el siguiente ejemplo se devuelve el tipo base del objeto base de un sinónimo; el objeto base es un objeto local.The following example returns the base type of a synonym's base object that is a local object.

USE tempdb;  
GO  
CREATE SYNONYM MyEmployee   
FOR AdventureWorks2012.HumanResources.Employee;  
GO  
SELECT OBJECTPROPERTYEX(OBJECT_ID('MyEmployee'), 'BaseType') AS BaseType;  

En el siguiente ejemplo se devuelve el tipo base del objeto base de un sinónimo; el objeto base es un objeto remoto ubicado en un servidor llamado Server1.The following example returns the base type of a synonym's base object that is a remote object located on a server named Server1.

EXECUTE sp_addlinkedserver Server1;  
GO  
CREATE SYNONYM MyRemoteEmployee  
FOR Server1.AdventureWorks2012.HumanResources.Employee;  
GO  
SELECT OBJECTPROPERTYEX(OBJECT_ID('MyRemoteEmployee'), 'BaseType') AS BaseType;  
GO  

Crear sinónimosCreate Synonyms

CREATE SYNONYM (Transact-SQL)CREATE SYNONYM (Transact-SQL)

DROP SYNONYM (Transact-SQL)DROP SYNONYM (Transact-SQL)