Использование синонимов (компонент Database Engine)

Можно использовать синонимы вместо их базового объекта, на который они ссылаются, в нескольких инструкциях SQL и контекстах выражения. Следующая таблица содержит список этих инструкций и контекстов выражения.

SELECT

INSERT

UPDATE

DELETE

EXECUTE

Подзапросы выборки

При работе с синонимами в сформулированных ранее контекстах будет затронут базовый объект. Например, если синоним ссылается на базовый объект, который является таблицей, и строка вставляется в синоним, то фактически строка вставляется в таблицу, на которую ссылается синоним.

ПримечаниеПримечание

Нельзя сослаться на синоним, который расположен на связанном сервере.

Синоним можно использовать в качестве параметра функции OBJECT_ID; однако эта функция вернет идентификатор объекта для синонима, а не для базового объекта.

Нельзя ссылаться на синоним в инструкции DDL. Например, следующие инструкции, ссылающиеся на синоним dbo.MyProduct, приведут к ошибке.

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

Следующие инструкции разрешений связаны только с синонимом, а не с базовым объектом.

GRANT

DENY

REVOKE

 

Синонимы не привязаны к схеме, и поэтому на них нельзя сослаться следующими привязанными к схеме контекстами выражения.

Ограничения CHECK

Вычисляемые столбцы

Выражения по умолчанию

Выражения правил

Привязанные к схеме представления

Привязанные к схеме функции

Дополнительные сведения о привязанных к схеме функциях см. в разделе Создание определяемых пользователем функций (компонент Database Engine).

Примеры

Следующий пример создает синоним, который будет использоваться в дальнейших примерах.

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

Следующий пример вставляет строку в базовую таблицу, на которую ссылается синоним MyAddressType.

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

Следующий пример демонстрирует, как на синоним можно сослаться в динамическом SQL.

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