CREATE SYNONYM (Transact-SQL)
Создание нового синонима.
Применимо для следующих объектов: SQL Server (SQL Server 2008 по текущую версию), База данных SQL Windows Azure (С первоначального выпуска по текущий выпуск). |
Синтаксические обозначения в Transact-SQL
Синтаксис
-- SQL Server Syntax
CREATE SYNONYM [ schema_name_1. ] synonym_name FOR <object>
<object> :: =
{
[ server_name.[ database_name ] . [ schema_name_2 ]. object_name
| database_name . [ schema_name_2 ].| schema_name_2. ] object_name
}
-- Windows Azure SQL Database Syntax
CREATE SYNONYM [ schema_name_1. ] synonym_name FOR < object >
< object > :: =
{
[database_name. [ schema_name_2 ].| schema_name_2. ] object_name
}
Аргументы
schema_name_1
Указывает схему, в которой создается новый синоним. Если аргумент schema не задан, SQL Server использует схему по умолчанию текущего пользователя.synonym_name
Имя нового синонима.server_name
Применимо для следующих объектов: С SQL Server 2008 по SQL Server 2014 включительно.
Имя сервера, на котором расположен базовый объект.
database_name
Имя базы данных, в которой расположен базовый объект. Если не задано database_name, используется имя текущей базы данных.schema_name_2
Имя схемы базового объекта. Если не задан аргумент schema_name, используется схема по умолчанию текущего пользователя.object_name
Имя базового объекта, на который ссылается синоним.База данных SQL Windows Azure поддерживает формат трехкомпонентного имени database_name.[schema_name].object_name, если database_name — это текущая база данных или database_name — это tempdb и 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.
Применимо для следующих объектов: С SQL Server 2008 по SQL Server 2014 включительно. |
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;