Usando sinônimos (Mecanismo de Banco de Dados)

É possível usar sinônimos em lugar do seu objeto base referido 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:

SELECT

INSERT

UPDATE

DELETE

EXECUTE

Sub-seleçõ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çãoObservaçã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.MyProduct geram 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

DENY

REVOKE

 

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

Colunas computadas

Expressões padrão

Expressões de regra

Exibições associadas a esquema

Funções associadas a esquema

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

Exemplos

O exemplo a seguir cria um sinônimo que será usado em exemplos subseqüentes.

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

O exemplo a seguir insere uma linha na tabela base que é referida pelo sinônimo MyAddressType.

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

O exemplo a seguir demonstra como um sinônimo pode ser referido no SQL dinâmico.

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