CREATE SYNONYM (Transact-SQL)
Создание нового синонима.
Синтаксические обозначения Transact-SQL
Синтаксис
CREATE SYNONYM [ schema_name_1. ] synonym_name FOR <object>
<object> :: =
{
[ server_name.[ database_name ] . [ schema_name_2 ].| database_name . [ schema_name_2 ].| schema_name_2. ] object_name
}
Аргументы
schema_name_1
Указывает схему, в которой создается новый синоним. Если аргумент schema не задан, SQL Server использует схему по умолчанию текущего пользователя.synonym_name
Имя нового синонима.server_name
Имя сервера, на котором расположен базовый объект.database_name
Имя базы данных, в которой расположен базовый объект. Если не задано database_name, используется имя текущей базы данных.schema_name_2
Имя схемы базового объекта. Если не задан аргумент schema_name, используется схема по умолчанию текущего пользователя.object_name
Имя базового объекта, на который ссылается синоним.
Замечания
Базовый объект может не существовать в момент создания синонима. SQL Server проверяет существование базового объекта только во время выполнения.
Синонимы могут создаваться для следующих типов объектов:
Хранимая процедура сборки (среда CLR) |
Функция сборки с табличным значением(среда CLR) |
Скалярная функция сборки (среда CLR) |
Агрегатные функции сборки (среда CLR) |
Процедура фильтра репликации |
Расширенная хранимая процедура |
Скалярная функция SQL |
функция SQL с табличным значением |
Встроенная функция SQL с табличным значением |
Хранимая процедура SQL |
Представление |
Таблица1 (пользовательская) |
1 Включает локальные и глобальные временные таблицы
Четырехчастные имена для базовых объектов функций не поддерживаются.
Синонимы можно создавать, удалять и ссылаться на них в динамическом SQL.
Разрешения
Для создания синонима в заданной схеме пользователь должен иметь разрешение CREATE SYNONYM и, либо владеть схемой, либо иметь разрешение ALTER SCHEMA.
Разрешение на выполнение CREATE SYNONYM можно предоставлять.
![]() |
---|
Чтобы успешно скомпилировать инструкцию CREATE SYNONYM, необязательно иметь разрешение на базовый объект, потому что проверка всех разрешений на базовые объекты откладывается до времени выполнения. |
Примеры
А.Создание синонима для локального объекта
В следующем примере сначала создается синоним для базового объекта Product в базе данных AdventureWorks2012, а затем выполняется запрос к этому синониму.
USE tempdb;
GO
-- Create a synonym for the Product table in AdventureWorks2012.
CREATE SYNONYM MyProduct
FOR AdventureWorks2012.Production.Product;
GO
-- Query the Product table by using the synonym.
USE tempdb;
GO
SELECT ProductID, Name
FROM MyProduct
WHERE ProductID < 5;
GO
Ниже приводится результирующий набор.
-----------------------
ProductID Name
----------- --------------------------
1 Adjustable Race
2 Bearing Ball
3 BB Ball Bearing
4 Headset Ball Bearings
(4 row(s) affected)
Б.Создание синонима для удаленного объекта
В следующем примере базовый объект, Contact, находится на удаленном сервере с именем Server_Remote.
EXEC sp_addlinkedserver Server_Remote;
GO
USE tempdb;
GO
CREATE SYNONYM MyEmployee FOR Server_Remote.AdventureWorks2012.HumanResources.Employee;
GO
В.Создание синонима для определяемой пользователем функции
В следующем примере создается функция с именем dbo.OrderDozen, которая увеличивает объем заказа до целого числа дюжин. Затем в примере создается синоним dbo.CorrectOrder для функции dbo.OrderDozen.
-- Creating the dbo.OrderDozen function
CREATE FUNCTION dbo.OrderDozen (@OrderAmt int)
RETURNS int
WITH EXECUTE AS CALLER
AS
BEGIN
IF @OrderAmt % 12 <> 0
BEGIN
SET @OrderAmt += 12 - (@OrderAmt % 12)
END
RETURN(@OrderAmt);
END;
GO
-- Using the dbo.OrderDozen function
DECLARE @Amt int
SET @Amt = 15
SELECT @Amt AS OriginalOrder, dbo.OrderDozen(@Amt) AS ModifiedOrder
-- Create a synonym dbo.CorrectOrder for the dbo.OrderDozen function.
CREATE SYNONYM dbo.CorrectOrder
FOR dbo.OrderDozen;
GO
-- Using the dbo.CorrectOrder synonym.
DECLARE @Amt int
SET @Amt = 15
SELECT @Amt AS OriginalOrder, dbo.CorrectOrder(@Amt) AS ModifiedOrder