CREATE SYNONYM (Transact-SQL)
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance
新しいシノニムを作成します。
構文
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
}
Azure SQL Database 構文:
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
シノニムが参照するベース オブジェクトの名前。
注意
Azure SQL Database では、database_name が現在のデータベースの場合、または database_name が tempdb
で、object_name が #
で始まる場合に、3 部構成の名前形式 database_name.[schema_name].object_name
がサポートされます。
解説
シノニムの作成時にベース オブジェクトが存在している必要はありません。 SQL Server は、ベース オブジェクトが存在することを実行時に確認します。
次の種類のオブジェクトに対してシノニムを作成することができます。
- アセンブリ (CLR) ストアド プロシージャ
- アセンブリ (CLR) テーブル値関数
- アセンブリ (CLR) スカラー関数
- アセンブリ (CLR) 集計関数
- レプリケーション フィルター プロシージャ
- 拡張ストアド プロシージャ
- T-SQL スカラー関数
- T-SQL テーブル値関数
- T-SQL インラインテーブル値関数
- T-SQL ストアド プロシージャ
- テーブル (ユーザー定義、ローカルおよびグローバル一時テーブルを含む)
- 表示
4 部構成の関数ベース オブジェクト名はサポートされません。
シノニムは、動的な T-SQL で作成、削除、参照することができます。
シノニムはデータベース固有であり、他のデータベースではアクセスできません。
アクセス許可
ユーザーが特定のスキーマ内にシノニムを作成するには、CREATE SYNONYM
アクセス許可が必要であり、さらにスキーマを所有しているか ALTER SCHEMA アクセス許可が与えられている必要があります。
CREATE SYNONYM
アクセス許可は、付与可能なアクセス許可です。
注意
ベース オブジェクトに対するアクセス許可のチェックはすべて実行時まで延期されるため、ベース オブジェクトに対するアクセス許可を持っていなくても、CREATE SYNONYM
ステートメントは正常にコンパイルされます。
例
A. ローカル オブジェクトに対してシノニムを作成する
次の例では、まず 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. ユーザー定義関数に対してシノニムを作成する
次の例では、注文量を 12 ユニットに増やす 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;