CREATE SYNONYM(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 로컬 및 전역 임시 테이블이 포함됩니다.
4부분으로 된 함수 기준 개체 이름은 지원되지 않습니다.
동의어는 동적 SQL에서 생성, 삭제 및 참조할 수 있습니다.
사용 권한
지정된 스키마에서 동의어를 만들려면 사용자에게 CREATE SYNONYM 권한이 있어야 하며 스키마를 소유하거나 ALTER SCHEMA 권한이 있어야 합니다.
CREATE SYNONYM 권한은 부여할 수 있는 권한입니다.
[!참고]
기준 개체에 대한 모든 권한 확인은 런타임까지 지연되므로 CREATE SYNONYM 문을 성공적으로 컴파일하기 위해 기준 개체에 대한 권한이 필요하지는 않습니다.
예
1. 로컬 개체의 동의어 만들기
다음 예에서는 먼저 AdventureWorks 데이터베이스의 기준 개체인 Product에 대한 동의어를 만든 다음 동의어를 사용하여 쿼리합니다.
USE tempdb;
GO
-- Create a synonym for the Product table in AdventureWorks.
CREATE SYNONYM MyProduct
FOR AdventureWorks.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)
2. 원격 개체의 동의어 만들기
다음 예에서 기준 개체인 Contact는 원격 서버인 Server_Remote에 있습니다.
EXEC sp_addlinkedserver Server_Remote;
GO
USE tempdb;
GO
CREATE SYNONYM MyEmployee FOR Server_Remote.AdventureWorks.HumanResources.Employee;
GO
3. 사용자 정의 함수의 동의어 만들기
다음 예제에서는 주문 총계를 정확하게 12단위로 늘리는 dbo.OrderDozen라는 함수를 만듭니다. 그런 다음 dbo.OrderDozen 함수에 대해 동의어 dbo.CorrectOrder를 만듭니다.
-- 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