Compartilhar via


Sinônimos (Mecanismo de Banco de Dados)

Um sinônimo é um objeto de banco de dados que atende às seguintes finalidades:

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

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

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

Para resolver esses dois problemas, você pode criar um sinônimo, EmpTable, no Server2 para a tabela Employee no Server1. Agora, o aplicativo cliente só precisa usar o nome de parte única, EmpTable, para fazer referência à tabela Employee . Além disso, se o local da tabela Funcionário for alterado, você precisará modificar o sinônimo, EmpTable, para apontar para o novo local da tabela Funcionário . Como não há nenhuma instrução ALTER SYNONYM, primeiro você precisa remover o sinônimo, EmpTable e, em seguida, recriar o sinônimo usando o mesmo nome, mas apontar o sinônimo para a nova localização de Funcionário.

Um sinônimo pertence a um esquema e, como outros objetos em um esquema, o nome de um sinônimo deve ser exclusivo. Você pode criar sinônimos para os seguintes objetos de banco de dados:

Procedimento armazenado do ASSEMBLY (CLR) Função com valor de tabela clr (assembly)
Função escalar assembly (CLR) Funções de agregação do Assembly CLR
Replication-filter-procedure Procedimento armazenado estendido
Função escalar SQL Função com valor de tabela SQL
Função embutida de valor de tabela no SQL Procedimento armazenado do SQL
Visualizar Tabela1 (definida pelo usuário)

1 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 referenciar uma função de agregação definida pelo usuário.

A associação entre um sinônimo e seu objeto base é apenas pelo nome. Toda a existência, tipo e permissões de verificação no objeto base são adiadas até o tempo de execução. Portanto, o objeto base pode ser modificado, descartado ou descartado e substituído por outro objeto que tem o mesmo nome que o objeto base original. Por exemplo, considere um sinônimo, MyContacts, que faz referência à tabela Person.Contact no Adventure Works. Se a tabela Contato for descartada e substituída por uma visualização chamada Person.Contact, MyContacts agora referencia a visualização Person.Contact.

As referências a sinônimos não estão associadas ao esquema. Portanto, um sinônimo pode ser descartado a qualquer momento. No entanto, ao remover um sinônimo, você corre o risco de deixar referências soltas para o sinônimo que foi removido. Essas referências só serão encontradas em tempo de execução.

Sinônimos e esquemas

Se você tiver um esquema padrão que não possui e quiser criar um sinônimo, deverá qualificar o nome do sinônimo com o nome de um esquema que você possui. Por exemplo, se você possui um esquema x, mas y é o esquema padrão e usa a instrução CREATE SYNONYM, você deve prefixar o nome do sinônimo com o esquema x, em vez de nomear o sinônimo usando um nome de parte única. Para obter mais informações sobre como criar sinônimos, consulte CREATE SYNONYM (Transact-SQL).

Concedendo permissões em um sinônimo

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

Você pode CONCEDER, NEGAR, REVOGAR todas ou qualquer uma das seguintes permissões em um sinônimo:

CONTROLE EXCLUIR
EXECUTAR INSERIR
SELECIONAR ASSUMIR RESPONSABILIDADE
ATUALIZAÇÃO DEFINIÇÃO DE EXIBIÇÃO

Usando sinônimos

Você pode usar sinônimos no lugar de seu objeto base referenciado em várias instruções SQL e contextos de expressão. A tabela a seguir contém uma lista dessas instruções e contextos de expressão:

SELECIONAR INSERIR
ATUALIZAÇÃO EXCLUIR
EXECUTAR Subseleções

Quando você está trabalhando com sinônimos nos contextos indicados anteriormente, o objeto base é afetado. Por exemplo, se um sinônimo faz referência a um objeto base que é uma tabela e você insere uma linha no sinônimo, você está inserindo uma linha na tabela referenciada.

Observação

Não é possível referenciar um sinônimo localizado em um servidor vinculado.

Você pode usar um sinônimo como o parâmetro para a função OBJECT_ID; no entanto, a função retorna a ID do objeto do sinônimo, não o objeto base.

Você não pode referenciar um sinônimo em uma instrução DDL. Por exemplo, as instruções a seguir, que fazem referência a um sinônimo chamado dbo.MyProduct, geram erros:

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

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

SUBVENÇÃO NEGAR
REVOGAR

Os sinônimos não são associados ao esquema e, portanto, não podem ser referenciados pelos seguintes contextos de expressão associada ao esquema:

Restrições CHECK Colunas computadas
Expressões padrão Expressões de regra
Exibições vinculadas a esquema Funções associadas a esquema

Para obter mais informações sobre funções associadas ao esquema, 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 um determinado banco de dados. Essa exibição de catálogo expõe metadados de sinônimo, como o nome do sinônimo e o nome do objeto base. Para obter mais informações sobre a exibição do sys.synonyms catálogo, consulte sys.synonyms (Transact-SQL).

Usando propriedades estendidas, você pode adicionar texto descritivo ou instrucional, máscaras de entrada e regras de formatação como propriedades de um sinônimo. Como a propriedade é armazenada no 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, consulte OBJECTPROPERTYEX (Transact-SQL).

Exemplos

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

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

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

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

Criar sinônimos

CREATE SYNONYM (Transact-SQL)

DROP SYNONYM (Transact-SQL)