CREATE SYNONYM (Transact-SQL)
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure
Создание нового синонима.
Соглашения о синтаксисе Transact-SQL
Синтаксис
Синтаксис SQL Server:
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
}
синтаксис База данных SQL Azure:
CREATE SYNONYM [ schema_name_1. ] synonym_name FOR <object>
<object> ::=
{
[ database_name. [ schema_name_2 ] . | schema_name_2. ] object_name
}
Аргументы
schema_name_1
Указывает схему, в которой создается новый синоним. Если schema_name не указан, SQL Server использует схему по умолчанию текущего пользователя.
synonym_name
Имя нового синонима.
server_name
Имя сервера, на котором расположен базовый объект.
database_name
Имя базы данных, в которой находится базовый объект. Если database_name не указан, используется имя текущей базы данных.
schema_name_2
Имя схемы базового объекта. Если schema_name не указан, используется схема по умолчанию текущего пользователя.
object_name
Имя базового объекта, на который ссылается синоним.
Примечание.
База данных SQL Azure поддерживает формат database_name.[schema_name].object_name
имени трех частей, если database_name является текущей базой данных или database_name, tempdb
а object_name начинается.#
Замечания
Базовый объект может не существовать в момент создания синонима. SQL Server проверяет существование базового объекта во время выполнения.
Синонимы могут создаваться для следующих типов объектов:
- Хранимая процедура сборки (среда CLR)
- Возвращающая табличное значение функция сборки (среда CLR)
- Скалярная функция сборки (среда CLR)
- Агрегатная функция сборки (среда CLR)
- Процедура фильтра репликации
- Расширенная хранимая процедура
- Скалярная функция T-SQL
- Функция T-SQL с табличным значением
- Функция T-SQL inline-table-valued
- Хранимая процедура T-SQL
- Таблица (определяемая пользователем, включает локальные и глобальные временные таблицы)
- Представления
Имена четырех частей для базовых объектов функции не поддерживаются.
Синонимы можно создавать, удалять и ссылаться на нее в динамическом T-SQL.
Синонимы являются конкретными базами данных и не могут быть доступны другим базам данных.
Разрешения
Чтобы создать синоним в данной схеме, пользователь должен иметь разрешение и иметь CREATE SYNONYM
либо схему, либо иметь разрешение ALTER SCHEMA.
Разрешение CREATE SYNONYM
является предоставленным разрешением.
Примечание.
Для успешной компиляции CREATE SYNONYM
инструкции не требуется разрешение на базовый объект, так как все проверки разрешений на базовый объект откладываются до времени выполнения.
Примеры
А. Создание синонима для локального объекта
В следующем примере сначала создается синоним для базового объекта Product
в базе данных AdventureWorks2022
, а затем выполняется запрос к этому синониму.
-- Create a synonym for the Product table in AdventureWorks2022.
CREATE SYNONYM MyProduct
FOR AdventureWorks2022.Production.Product;
GO
-- Query the Product table by using the synonym.
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)
B. Создание синонима для удаленного объекта
В следующем примере базовый объект, Contact
, находится на удаленном сервере с именем Server_Remote
.
EXEC sp_addlinkedserver Server_Remote;
GO
USE tempdb;
GO
CREATE SYNONYM MyEmployee FOR Server_Remote.AdventureWorks2022.HumanResources.Employee;
GO
C. Создание синонима для определяемой пользователем функции
В следующем примере создается функция с именем dbo.OrderDozen
, которая увеличивает объем заказа до 12 единиц. Затем в примере создается синоним 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;