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, в базе данных AdventureWorks2008R2, а затем выполняется запрос к нему.

USE tempdb;
GO
-- Create a synonym for the Product table in AdventureWorks2008R2.
CREATE SYNONYM MyProduct
FOR AdventureWorks2008R2.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)

Б. Создание синонима для удаленного объекта

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

EXEC sp_addlinkedserver Server_Remote;
GO
USE tempdb;
GO
CREATE SYNONYM MyEmployee FOR Server_Remote.AdventureWorks2008R2.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