Data Modeling Evangelist Kaien Kim's Blog
[MSSQL]SYNONYM in SQL Server 2005 본문
이번 강좌의 목표는 Production.ProductModelProductDescriptionCulture 와 같은 대땅 긴 테이블을 참조할 때 매번 입력하기가 귀찮으니 이를 별칭으로 아주 간단하게 불러보자는 것입니다. SYNONYM은 우리말로 별칭, 동의어 쯤으로 해석될 수 있습니다. 영어 선생님 발음을 들어보니 첫 음절에 강쇠를 줘서 "씨~누님" 라고 하더라구요. 아무튼 SQL Server 2005에서는 SYNONYM을 통해 앞의 경우처럼 아주 긴 테이블 이름에 다른 별칭을 줘서 참조할 수 있게 해준답니다. 다음은 별칭을 붙일 수 있는 객체들의 목록입니다.
- Table
- View
- Assembly (CLR) Stored Procedure
- Assembly (CLR) Table-valued Function
- Assembly (CLR) Scalar Function
- Assembly Aggregate (CLR) Aggregate Functions
- Replication-filter-procedure
- Extended Stored Procedure
- SQL Scalar Function
- SQL Table-valued Function
- SQL Inline-table-valued Function
- SQL Stored Procedure
생각보다 별칭을 줄 수 있는 객체가 많죠? 왠만한건 다 된다고 보면 될 것 같으네요. 일단 해보고 안 되면, 안 되는구나~~ 하고 포기하면 되는거죠^^; 이제 본격적인 테스트입니다. 아래 쿼리를 실행하여 RainbowResearch, RiverResearch 2개의 데이터베이스를 생성합니다.
USE [master]
GO
/****** Object: Database [RainbowResearch] ******/
IF EXISTS (SELECT name FROM sys.databases WHERE name = N'RainbowResearch')
DROP DATABASE [RainbowResearch]
GO
CREATE DATABASE RainbowResearch
GO
USE RainbowResearch
GO
USE [master]
GO
/****** Object: Database [RainbowResearch] ******/
IF EXISTS (SELECT name FROM sys.databases WHERE name = N'RiverResearch')
DROP DATABASE [RiverResearch]
GO
CREATE DATABASE RiverResearch
GO
USE RiverResearch
GO
이제 각각의 데이터베이스에 스키마와 테이블, 저장 프로시저를 생성합니다. 그리고 테이블에는 소량의 데이터를 함께 추가합니다.
USE RainbowResearch 이제 각각의 테이블을 통해 직접 SELECT 쿼리를 해 보도록 하겠습니다. GO GO Fig 1.2영문원문 : http://www.databasejournal.com/features/mssql/print.php/3635426
GO
CREATE SCHEMA Rain
GO
CREATE SCHEMA Snow
GO
CREATE TABLE Rainbowresearch.Rain.Cities (id INT, City VARCHAR(200))
GO
INSERT INTO Rainbowresearch.Rain.Cities SELECT 1, 'Hongkong'
INSERT INTO Rainbowresearch.Rain.Cities SELECT 2, 'Tokyo'
INSERT INTO Rainbowresearch.Rain.Cities SELECT 3, 'Beijing'
INSERT INTO Rainbowresearch.Rain.Cities SELECT 4, 'Taipei'
INSERT INTO Rainbowresearch.Rain.Cities SELECT 5, 'Seoul'
INSERT INTO Rainbowresearch.Rain.Cities SELECT 6, 'Mumbai'
GO
CREATE PROCEDURE Rain.DisplayCities @id INT
AS
SELECT City FROM Rainbowresearch.Rain.Cities WHERE id=@id
GO
CREATE TABLE Rainbowresearch.Snow.Cities (id INT, City VARCHAR(200))
GO
INSERT INTO Rainbowresearch.Snow.Cities SELECT 1, 'Tokyo'
INSERT INTO Rainbowresearch.Snow.Cities SELECT 2, 'Seoul'
INSERT INTO Rainbowresearch.Snow.Cities SELECT 3, 'Moscow'
INSERT INTO Rainbowresearch.Snow.Cities SELECT 4, 'NewYork'
GO
CREATE PROCEDURE Snow.DisplayCities @id INT
AS
SELECT City FROM Rainbowresearch.Snow.Cities WHERE id=@id
GO
USE RiverResearch
GO
CREATE SCHEMA River
GO
GO
CREATE TABLE RiverResearch.River.Cities (id INT, City VARCHAR(200))
GO
INSERT INTO RiverResearch.River.Cities SELECT 1, 'Hongkong'
INSERT INTO RiverResearch.River.Cities SELECT 2, 'Tokyo'
INSERT INTO RiverResearch.River.Cities SELECT 3, 'Beijing'
INSERT INTO RiverResearch.River.Cities SELECT 4, 'Taipei'
INSERT INTO RiverResearch.River.Cities SELECT 5, 'Seoul'
GO
CREATE PROCEDURE River.DisplayCities @id INT
AS
SELECT City FROM RiverResearch.River.Cities WHERE id=@id
GO
SELECT * FROM RiverResearch.River.Cities
GO
SELECT * FROM Rainbowresearch.Rain.Cities
GO
SELECT * FROM Rainbowresearch.Snow.Cities
GO결과는 아래 [Fig 1.0] 과 같습니다. 우리가 적어야할 문장이 길로 긴것을 알 수 있죠?
Fig 1.0이제 SYNONYM 을 이용하여 우리가 길게 적었던 데이터베이스, 스키마, 테이블 이름을 짧게 줄여 불러보도록 하겠습니다.
USE RainbowResearch
GO
CREATE SYNONYM RiverCities FOR RiverResearch.River.Cities
GO
CREATE SYNONYM RainCities FOR Rainbowresearch.Rain.Cities
GO
CREATE SYNONYM SnowCities FOR Rainbowresearch.Snow.Cities
GO
USE RiverResearch
GO
CREATE SYNONYM RiverCities FOR RiverResearch.River.Cities
GO
CREATE SYNONYM RainCities FOR Rainbowresearch.Rain.Cities
GO
CREATE SYNONYM SnowCities FOR Rainbowresearch.Snow.Cities 다음 쿼리를 실행하여 SYNONYM을 통해 데이터를 SELECT 합니다.
USE RiverResearch
GO
SELECT * FROM RiverCities
SELECT * FROM RainCities
SELECT * FROM SnowCities
GO
USE RainbowResearch
GO
SELECT * FROM RiverCities
GO
SELECT * FROM RainCities
GO
SELECT * FROM SnowCities
GO 위 쿼리의 결과는 아래 [Fig 1.1]과 같습니다.
Fig 1.1SYNONYM을 통해 이번에는 저장 프로시저에 별칭을 주어 보겠습니다.
USE RainbowResearch
GO
CREATE SYNONYM ShowRiverCities FOR RiverResearch.River.DisplayCities
GO
CREATE SYNONYM ShowRainCities FOR Rainbowresearch.Rain.DisplayCities
GO
CREATE SYNONYM ShowSnowCities FOR Rainbowresearch.Snow.DisplayCities
GO
USE RiverResearch
GO
CREATE SYNONYM ShowRiverCities FOR RiverResearch.River.DisplayCities
GO
CREATE SYNONYM ShowRainCities FOR Rainbowresearch.Rain.DisplayCities
GO
CREATE SYNONYM ShowSnowCities FOR Rainbowresearch.Snow.DisplayCities 이제 SYNONYM을 통해 저장 프로시저까지 실행할 수 있습니다.
USE RainbowResearch
GO
EXEC ShowRainCities 1
GO
EXEC ShowRiverCities 3
GO
EXEC ShowSnowCities 4
GO
USE RiverResearch
GO
EXEC ShowRainCities 1
GO
EXEC ShowRiverCities 3
GO
EXEC ShowSnowCities 4
GO 결과는 아래 [Fig 1.2]와 같습니다.
Fig 1.2