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


Синонимы (ядро СУБД)

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

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

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

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

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

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

Хранимая процедура сборки (CLR) Функция с табличным значением сборки (CLR)
Скалярная функция Assembly (CLR) Агрегатные функции сборки (CLR)
Процедура фильтрации репликации Расширенная хранимая процедура
Скалярная функция SQL Функция табличного значения SQL
Функция встроенного табличного значения SQL Хранимая процедура SQL
Просмотреть Таблица1 (определяемая пользователем)

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

Замечание

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

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

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

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

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

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

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

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

Вы можете ПРЕДОСТАВИТЬ, ЗАПРЕТить, ОТОЗВАТЬ все или какие-либо из следующих разрешений для синонима:

КОНТРОЛЬ Удалить
ИСПОЛНЯТЬ ВСТАВИТЬ
ВЫБЕРИТЕ ВЗЯТЬ НА СЕБЯ ОТВЕТСТВЕННОСТЬ
Обновление ПРЕДСТАВЛЕНИЕ ОПРЕДЕЛЕНИЯ

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

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

ВЫБЕРИТЕ ВСТАВИТЬ
Обновление Удалить
ИСПОЛНЯТЬ Вложенная выборка

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

Замечание

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

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

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

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

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

грант ОТКЛОНИТЬ
АННУЛИРОВАТЬ

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

CHECK, ограничение Вычисляемые столбцы
Стандартные выражения Выражения правил
Представления с привязкой к схеме Функции с привязкой к схеме

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

Получение сведений об синонимах

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

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

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

Примеры

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

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

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

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

Создание синонимов

СОЗДАТЬ СИНОНИМ (Transact-SQL)

УДАЛИТЬ СИНОНИМ (Transact-SQL)