Синонимы (компонент Database Engine)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

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

  • предоставляет альтернативное имя для другого объекта базы данных, существующего на локальном или удаленном сервере, на которое затем ссылаются как на базовый объект;

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

Например, рассмотрим таблицу Employee Adventure Works, расположенную на сервере с именем Server1. Для доступа к этой таблице сервера Server2клиентское приложение должно указать имя из четырех компонентов: Server1.AdventureWorks.Person.Employee. Если бы таблицу нужно было переместить, например, на другой сервер, клиентское приложение также надо было бы модифицировать, чтобы отобразить ее новое местоположение.

Чтобы устранить обе эти проблемы, можно создать синоним EmpTable в выделенной или существующей схеме RemoteObjects на сервере Server2 для таблицы Employee на сервере Server1. Теперь клиентское приложение может использовать только имя двух частей RemoteObjects.EmpTable для ссылки на таблицу Employee Server1. Кроме того, если местоположение таблицы Employee будет изменено, нужно будет только изменить синоним EmpTable, чтобы он указывал на новое местоположение таблицы Employee . Так как инструкция ALTER SYNONYM отсутствует, сначала необходимо удалить синоним RemoteObjects.EmpTable, а затем повторно создать синоним с тем же именем, но теперь указать синоним на новое расположение таблицы Employee .

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

Хранимая процедура сборки (среда CLR)

Скалярная функция сборки (среда CLR)

Процедура фильтра репликации

Скалярная функция SQL

Возвращающая табличное значение встроенная функция SQL

Представления

Возвращающая табличное значение функция сборки (среда CLR)

Агрегатная функция сборки (среда CLR)

Возвращающая табличное значение функция SQL

Хранимая процедура SQL

Таблица* (пользовательская)

*Включает локальные и глобальные временные таблицы

Примечание.

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

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

Синоним связан с его базовым объектом только по имени. Любые проверки на существование, тип и разрешения для базового объекта откладываются до стадии выполнения. Таким образом, базовый объект может быть изменен, удален или заменен другим объектом, имеющим то же имя, что и исходный. Например, рассмотрим синоним dbo . MyContacts, ссылающийся на таблицу Person.Contact в Adventure Works. Если таблица Contact удаляется и заменяется представлением с именем Person.Contact, синоним MyContacts будет указывать на представление Person.Contact .

Ссылки на синонимы не привязаны к схеме. Таким образом, синоним может быть удален в любой момент. Однако удаление синонима может оказаться чревато тем, что останутся несвязанные ссылки на него, что проявится только на стадии выполнения.

Синонимы и схемы

Если пользователь создает синоним в схеме, владельцем которой он не является, имя синонима необходимо предварять именем схемы, владельцем которой является пользователь. Например, если вы владеете схемой S1, но S2 является схемой по умолчанию и используете инструкцию CREATE SYNONYM, необходимо префиксируйте имя синонима с схемой S1, а не именование синонима с помощью имени одной части. Дополнительные сведения о создании синонимов см. в статье CREATE SYNONYM (Transact-SQL).

Предоставление разрешений на синоним

Только владельцы синонима или члены ролей db_ownerи db_ddladmin могут предоставлять разрешения на синоним.

Для синонима выбрать GRANT, DENY и REVOKE для всех или любых разрешений из нижеперечисленных:

ПРОИЗВОДИТЕЛЬНОСТИ

Выполнение 

SELECT

UPDATE

DELETE

ВСТАВИТЬ

TAKE OWNERSHIP

VIEW DEFINITION

Использование синонимов

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

SELECT

UPDATE

Выполнение 

ВСТАВИТЬ

DELETE

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

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

Примечание.

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

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

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

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

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

GRANT

REVOKE

DENY

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

CHECK, ограничение

Стандартные выражения

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

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

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

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

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

Получение данных о синонимах

Представление каталога sys.synonyms содержит запись для каждого синонима в данной базе данных. Это представление каталога обеспечивает доступ к таким метаданным, как имя синонима и имя базового объекта. Дополнительные сведения см. в статье sys.synonyms (Transact-SQL).

С помощью расширенных свойств можно добавлять описательный или управляющий текст, маски ввода и правила форматирования в виде свойств синонима. Так как свойства хранятся в базе данных, все приложения, считывающие их, могут таким же образом вычислять объект. Дополнительные сведения см. в разделе sp_addextendedproperty (Transact-SQL).

Чтобы найти базовый тип базового объекта синонима, используйте функцию OBJECTPROPERTYEX. Дополнительные сведения см. в разделе OBJECTPROPERTYEX (Transact-SQL).

Примеры

В следующем примере будет возвращен базовый тип локального базового объекта синонима.

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;  

В следующем примере будет возвращен базовый тип удаленного базового объекта синонима, где базовый объект находится на сервере 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  

Создание синонимов
CREATE SYNONYM (Transact-SQL)
DROP СИНОНИМ (Transact-SQL)