Поделиться через


Синонимы (движок базы данных)

Применимо к:SQL ServerБаза данных Azure SQLУправляемый экземпляр Azure SQLБаза данных SQL в Microsoft Fabric

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

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

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

Например, рассмотрим таблицу 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

обновление

Удалить

ВСТАВИТЬ

ВОЗЬМИТЕ ОТВЕТСТВЕННОСТЬ

ПРЕДСТАВЛЕНИЕ ОПРЕДЕЛЕНИЯ

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

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

SELECT

обновление

Выполнить

ВСТАВИТЬ

Удалить

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

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

Примечание.

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

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

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

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

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

Разрешение

REVOKE

ОТКЛОНИТЬ

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

ограничение 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 СИНОНИМ (Transact-SQL)
DROP СИНОНИМ (Transact-SQL)