Sinônimos (Mecanismo de Banco de Dados)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

Um sinônimo é um objeto de banco de dados que atende aos seguintes propósitos:

  • Fornece um nome alternativo para outro objeto do banco de dados referido como o objeto base que pode existir em um servidor local ou remoto.

  • Fornece uma camada de abstração que protege um aplicativo cliente de alterações feitas no nome ou local do objeto base.

Por exemplo, considere a tabela Employee de Adventure Works, localizada em um servidor chamado Server1. Para fazer referência a esta tabela em outro servidor, Server2, um aplicativo precisa usar o nome de quatro partes Server1.AdventureWorks.Person.Employee. Além disso, se o local da tabela for alterado, por exemplo, para outro servidor, o aplicativo cliente precisará ser modificado para refletir essa alteração.

Para resolver esses dois problemas, é possível criar um sinônimo, EmpTable, em um esquema dedicado ou existente, RemoteObjects, em Server2 para a tabela Employee em Server1. Agora, o aplicativo cliente só precisa usar o nome de duas partes, RemoteObjects.EmpTable, para fazer referência à tabela Employee em Server1. Além disso, se o local da tabela Employee for alterado, você precisará modificar o sinônimo, EmpTable, para apontar para o novo local da tabela Employee . Como não há instrução ALTER SYNONYM, primeiro é preciso eliminar o sinônimo, RemoteObjects.EmpTable, e depois recriar esse sinônimo com o mesmo nome, mas agora apontando o sinônimo para o novo local da tabela Employee.

Um sinônimo pertence a um esquema e, como outros objetos de um esquema, seu nome precisa ser exclusivo. É possível criar sinônimos para os seguintes objetos de banco de dados:

Procedimento armazenado de assembly (CLR)

Função escalar de assembly (CLR)

Procedimento de filtro de replicação

Função SQL escalar

Função SQL com valor de tabela embutida

Exibir

Função com valor de tabela de assembly (CLR)

Funções de agregação de assembly (CLR)

Função SQL com valor de tabela

Procedimento armazenado SQL

Tabela* (definida pelo usuário)

*Inclui tabelas temporárias locais e globais

Observação

Não há suporte para nomes de quatro partes para objetos base de função.

Um sinônimo não pode ser o objeto base de outro sinônimo e um sinônimo não pode fazer referência a uma função de agregação definida pelo usuário.

A associação entre um sinônimo e seu objeto base é feita apenas pelo nome. Toda verificação de existência, tipo e permissões no objeto base é adiada até o tempo de execução. Portanto o objeto base pode ser modificado, descartado ou descartado e substituído por outro objeto que tenha o mesmo nome que o objeto base original. Por exemplo, considere um sinônimo, dbo.MyContacts, que faz referência à tabela Person.Contact em Adventure Works. Se a tabela Contact for removida e substituída por uma exibição nomeada Person.Contact, MyContacts agora fará referência à exibição Person.Contact .

Referências a sinônimos não são associadas a esquemas. Portanto, um sinônimo pode ser descartado a qualquer momento. No entanto, ao descartar um sinônimo, você corre o risco de deixar referências pendentes ao sinônimo descartado. Essas referências serão localizadas apenas em tempo de execução.

Sinônimos e esquemas

Se você tiver um esquema padrão do qual você não é o proprietário e desejar criar um sinônimo, deverá qualificar o nome do sinônimo com o nome de um esquema que seja de sua propriedade. Por exemplo, se você possui um esquema S1, mas S2 é seu esquema padrão e vocêr usa a instrução CREATE SYNONYM, deverá prefixar o nome do sinônimo com o esquema S1, em vez de nomear o sinônimo usando um nome de parte única. Para obter mais informações sobre como criar sinônimos, veja CREATE SYNONYM (Transact-SQL).

Concedendo permissões em um sinônimo

Apenas os proprietários de sinônimos, membros de db_owner, ou membros de db_ddladmin podem conceder permissão em um sinônimo.

Você pode GRANT, DENY e REVOKE todas ou qualquer uma das seguintes permissões em um sinônimo:

CONTROL

EXECUTE

SELECT

UPDATE

DELETE

INSERT

TAKE OWNERSHIP

VIEW DEFINITION

Usando sinônimos

É possível usar sinônimos em lugar do objeto base referenciado em várias instruções SQL e contextos de expressão. As seguintes colunas contêm uma lista dessas instruções e contextos de expressão:

SELECT

UPDATE

Execute

INSERT

DELETE

Subseleções

Quando você está trabalhando com sinônimos nos contextos declarados anteriormente, o objeto base é afetado. Por exemplo, se um sinônimo fizer referência a um objeto base que está em uma tabela e você inserir uma linha no sinônimo, na verdade você estará inserindo uma linha na tabela referida.

Observação

Não é possível fazer referência a um sinônimo localizado em um servidor vinculado.

É possível usar um sinônimo como o parâmetro da função OBJECT_ID. No entanto, a função retorna a ID do objeto do sinônimo, não o objeto base.

Não é possível fazer referência a um sinônimo em uma instrução DDL. Por exemplo, as instruções a seguir que fazem referência a um sinônimo denominado dbo.MyProductgeram erros:

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

As instruções de permissão a seguir são associadas apenas ao sinônimo e não ao objeto base:

GRANT

REVOKE

DENY

Sinônimos não são associados a esquemas e, portanto, não podem ser referidos pelos seguintes contextos de expressão associados a esquemas:

Restrições CHECK

Expressões padrão

Exibições associadas a esquema

Colunas computadas

Expressões de regra

Funções associadas a esquema

Para obter mais informações sobre funções vinculadas a esquemas, consulte Criar funções definidas pelo usuário (Mecanismo de Banco de Dados).

Obtendo informações sobre sinônimos

A exibição do catálogo sys.synonyms contém uma entrada para cada sinônimo em determinado banco de dados. Essa exibição do catálogo expõe metadados de sinônimos, como o nome do sinônimo e o nome do objeto base. Para obter mais informações, confira sinônimos (Transact-SQL).

Usando propriedades estendidas é possível adicionar texto descritivo ou instrucional, máscaras de entrada e regras de formatação como propriedades de um sinônimo. Como a propriedade é armazenada em um banco de dados, todos os aplicativos que leem a propriedade podem avaliar o objeto da mesma maneira. Para obter mais informações, veja sp_addextendedproperty (Transact-SQL).

Para localizar o tipo base do objeto base de um sinônimo, use a função OBJECTPROPERTYEX. Para obter mais informações, confira OBJECTPROPERTYEX (Transact-SQL).

Exemplos

O exemplo a seguir retorna o tipo básico do objeto base de um sinônimo que é um objeto local.

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

O exemplo a seguir retorna o tipo básico do objeto base de um sinônimo que é um objeto remoto localizado em um servidor denominado Server1.

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

Criar sinônimos
CREATE SYNONYM (Transact-SQL)
DROP SYNONYM (Transact-SQL)