다음을 통해 공유


동의어(데이터베이스 엔진)

적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance

동의어는 다음과 같은 용도로 사용되는 데이터베이스 개체입니다.

  • 로컬 서버나 원격 서버에 있을 수 있는 기본 개체로 참조되는 다른 데이터베이스 개체의 대체 이름을 제공합니다.

  • 기본 개체의 이름이나 위치가 변경되지 않도록 클라이언트 애플리케이션을 보호하는 추상화 계층을 제공합니다.

예를 들어 Server1이라는 서버에 있는 Adventure Works의 Employee 테이블을 생각해 보세요. 다른 서버 Server2에서 이 테이블을 참조하려면 클라이언트 애플리케이션에서 네 부분으로 구성된 이름 Server1.AdventureWorks.Person.Employee를 사용해야 합니다. 또한 테이블의 위치가 다른 서버로 변경되는 경우 해당 변경 사항을 반영하도록 클라이언트 애플리케이션을 수정해야 합니다.

이러한 문제를 모두 해결하려면 Server1Employee 테이블에 대해 Server2의 전용 또는 기존 스키마인 RemoteObjects에 동의어 EmpTable을 만들 수 있습니다. 이제 클라이언트 애플리케이션은 Server1의 Employee 테이블을 참조하기 위해 RemoteObjects.EmpTable이라는 두 부분으로 구성된 이름만 사용하면 됩니다. 또한 Employee 테이블 위치가 변경되면 동의어 EmpTable를 수정하여 Employee 테이블의 새 위치를 가리키게 해야 합니다. ALTER SYNONYM 문이 없으므로 먼저 동의어 RemoteObjects.EmpTable을 삭제한 다음 같은 이름으로 동의어를 다시 만들지만 이제 동의어가 Employee 테이블의 새 위치를 가리키게 해야 합니다.

동의어는 스키마에 속하며 스키마의 다른 개체와 마찬가지로 동의어의 이름은 고유해야 합니다. 다음 데이터베이스 개체에 대해 동의어를 만들 수 있습니다.

어셈블리(CLR) 저장 프로시저

어셈블리(CLR) 스칼라 함수

복제 필터 프로시저

SQL 스칼라 함수

SQL 인라인 테이블 반환 함수

View

어셈블리(CLR) 테이블 반환 함수

어셈블리(CLR) 집계 함수

SQL 테이블 반환 함수

SQL 저장 프로시저

테이블*(사용자 정의)

*로컬 및 전역 임시 테이블이 포함됨

참고 항목

함수 기본 개체의 네 부분으로 된 이름은 지원되지 않습니다.

동의어는 다른 동의어의 기본 개체일 수 없으며 동의어는 사용자 정의 집계 함수를 참조할 수 없습니다.

동의어와 해당 기본 개체는 이름별로만 바인딩됩니다. 기본 개체에 대한 모든 존재, 형식 및 사용 권한 확인은 런타임까지 지연됩니다. 따라서 기본 개체를 수정하거나 삭제하거나 또는 삭제하여 원래 기본 개체와 이름이 같은 다른 개체로 바꿀 수 있습니다. 예를 들어 Adventure Works의 Person.Contact 테이블을 참조하는 동의어 dbo.MyContacts를 생각해보세요. Contact 테이블을 삭제하고 Person.Contact이라는 보기로 바꾸면 MyContacts가 이제 Person.Contact 보기를 참조합니다.

동의어에 대한 참조는 스키마 바운드가 아닙니다. 따라서 동의어는 언제든지 삭제할 수 있습니다. 그러나 동의어를 삭제하면 삭제된 동의어에 매달려 있는 참조를 남길 위험이 있습니다. 이러한 참조는 런타임에만 찾을 수 있습니다.

동의어 및 스키마

소유하지 않은 기본 스키마가 있고 동의어를 만들려는 경우 동의어 이름을 소유하고 있는 스키마의 이름으로 한정해야 합니다. 예를 들어 스키마 S1을 소유하고 있지만 S2가 기본 스키마이고 CREATE SYNONYM 문을 사용하는 경우 한 부분으로 구성된 이름을 사용하여 동의어 이름을 지정하는 대신 동의어 이름 앞에 스키마 S1을 붙여야 합니다. 동의어를 만드는 방법에 대한 자세한 내용은 CREATE SYNONYM(Transact-SQL)을 참조하세요.

동의어에 대한 사용 권한 부여

동의어 소유자인 db_owner 멤버 또는 db_ddladmin 멤버만 동의어에 대한 권한을 부여할 수 있습니다.

동의어에 대한 다음과 같은 모든 권한에 대해 GRANT, DENYREVOKE를 수행할 수 있습니다.

CONTROL

EXECUTE

SELECT

UPDATE

DELETE

INSERT

TAKE OWNERSHIP

VIEW DEFINITION

동의어 사용

여러 SQL 문 및 식 컨텍스트에서 동의어를 해당 참조 기준 개체 대신 사용할 수 있습니다. 다음 열에서는 이러한 문 및 식 컨텍스트를 나열합니다.

SELECT

UPDATE

CREATE 문을 실행하기 전에

INSERT

Delete

Sub-selects

앞에서 설명한 컨텍스트에서 동의어를 사용하면 기준 개체가 영향을 받습니다. 예를 들어 동의어가 테이블 기준 개체를 참조하며 동의어에 행을 삽입한 경우 실제로 참조되는 테이블에 행이 삽입됩니다.

참고 항목

연결된 서버에 있는 동의어는 참조할 수 없습니다.

동의어를 OBJECT_ID 함수의 매개 변수로 사용할 수 있습니다. 그러나 함수는 기본 개체가 아닌 동의어의 개체 ID를 반환합니다.

DDL 문에서는 동의어를 참조할 수 없습니다. 예를 들어 dbo.MyProduct라는 동의어를 참조하는 다음 문은 오류를 생성합니다.

ALTER TABLE dbo.MyProduct  
   ADD NewFlag int null;  
EXEC ('ALTER TABLE dbo.MyProduct  
   ADD NewFlag int null');  

다음 권한 문은 기본 개체가 아닌 동의어와만 연결됩니다.

GRANT

REVOKE

DENY

동의어는 스키마에 바인딩되지 않으므로 다음 스키마 바운드 식 컨텍스트에서 참조할 수 없습니다.

CHECK 제약 조건

기본 식

스키마 바운드 뷰

계산 열

규칙 식

스키마 바운드 함수

스키마 바운드 함수에 대한 자세한 내용은 사용자 정의 함수 만들기(데이터베이스 엔진)를 참조하세요.

동의어에 대한 정보 가져오기

sys.synonyms 카탈로그 뷰에는 지정된 데이터베이스의 각 동의어에 대한 항목이 들어 있습니다. 이 카탈로그 뷰는 동의어 이름과 기본 개체 이름과 같은 동의어 메타데이터를 노출합니다. 자세한 내용은 sys.synonyms(Transact-SQL)를 참조하세요.

확장 속성을 사용하면 설명 또는 명령 텍스트, 입력 마스크 및 서식 규칙을 동의어의 속성으로 추가할 수 있습니다. 속성이 데이터베이스에 저장되므로 속성을 읽는 모든 애플리케이션은 동일한 방식으로 개체를 평가할 수 있습니다. 자세한 내용은 sp_addextendedproperty(Transact-SQL)를 참조하세요.

동의어의 기본 개체의 기본 형식을 찾으려면 OBJECTPROPERTYEX 함수를 사용합니다. 자세한 내용은 OBJECTPROPERTYEX(Transact-SQL)를 참조하세요.

예제

다음 예에서는 로컬 개체인 동의어 기본 개체의 기본 형식을 반환합니다.

USE tempdb;  
GO
CREATE SCHEMA SynSchema
GO  
CREATE SYNONYM SynSchema.MyEmployee   
FOR AdventureWorks2022.HumanResources.Employee;  
GO  
SELECT OBJECTPROPERTYEX(OBJECT_ID('SynSchema.MyEmployee'), 'BaseType') AS BaseType;  

다음 예에서는 Server1서버에 위치한 원격 개체인 동의어 기본 개체의 기본 유형을 반환합니다.

EXECUTE sp_addlinkedserver Server1;  
GO  
CREATE SYNONYM SynSchema.MyRemoteEmployee  
FOR Server1.AdventureWorks2022.HumanResources.Employee;  
GO  
SELECT OBJECTPROPERTYEX(OBJECT_ID('MyRemoteEmployee'), 'BaseType') AS BaseType;  
GO  

동의어 만들기
CREATE SYNONYM(Transact-SQL)
DROP SYNONYM(Transact-SQL)