2009-08-07 3 views

답변

4

(here) 다른 테이블의 별칭을 만들면 쉽게 참조 할 수 있습니다. 마찬가지로

select * from table longname as ln

그러나 영구 및 보급.

편집 : 사용자 정의 기능, 로컬 및 원격 개체, 테이블뿐만 아니라 작동합니다. 다른 프로덕션 서버에 에 액세스하십시오 클라이언트 테이블에 필요한 사용자 데이터베이스에 저장 프로 시저 이 있다면

5

이 의 유용성의 예는 수 있습니다. 데이터베이스 사용자에서 저장 프로 시저를 만든 것으로 가정하면 을 다음과 같은 동의어로 설정해야 할 수 있습니다. USE Users; SYNONYM 클라이언트 생성 For Offsite01.Production.dbo.Clients; 저장 프로 시저 를 작성하는 대신 전체 별칭이 액세스 할 때마다 테이블 방금 별칭을 클라이언트를 사용할 수 있음을 작성할 필요하면 지금

이동합니다. 혹시 위치 또는 프로덕션 데이터베이스 위치의 이름을 변경 경우 또한, 할 수있는 모든 당신 필요가 대신 이전 서버를 참조하는 모든 저장 프로 시저를 수정할 필요없이 하나의 동의어 을 수정합니다. 에서

: 일부 기업 시스템에서 http://blog.sqlauthority.com/2008/01/07/sql-server-2005-introduction-and-explanation-to-synonym-helpful-t-sql-feature-for-developer/

63

, 당신은 당신이 통제 할 수없는 이상 원격 객체를 처리 할 수 ​​있습니다. 예를 들어 다른 부서 나 팀에서 유지 관리하는 데이터베이스입니다.

동의어를 사용하면 SQL 코드에서 기본 객체의 이름과 위치를 분리 할 수 ​​있습니다. 이렇게하면 원하는 테이블이 새 서버/데이터베이스로 이동되거나 이름이 바뀌더라도 동의어 테이블을 대상으로 코드를 작성할 수 있습니다.

예를 들어, 나는 다음과 같은 쿼리를 작성할 수

insert into MyTable 
(...) 
select ... 
from remoteServer.remoteDatabase.dbo.Employee 

하지만 서버 또는 데이터베이스, 스키마 또는 테이블 내 코드에 영향을 미칠 것이다 변경하는 경우. 대신 내가 대신 동의어를 원격 서버에 대한 동의어를 생성하고 사용할 수 있습니다

insert into MyTable 
(...) 
select ... 
from EmployeeSynonym 

를 기본 객체가 위치 나 이름을 변경하는 경우, 난 단지 새 개체를 가리 키도록 내 동의어를 업데이트해야합니다.

http://www.mssqltips.com/sqlservertip/1820/use-synonyms-to-abstract-the-location-of-sql-server-database-objects/

+0

나는 this->을 선택 IDENT_CURRENT ('<동의어 이름>')와 같은 기능을 사용하여 삽입 된 행의 현재 ID 값을 알고받을 수 있습니까? 그 테이블의 최대 (ID)를 수행하여 ID 값을 얻고 싶지 않습니다. 가능한가? – ivorykoder

+0

@ivorykoder 아니요. 아는 한, 구문은 작동하지 않습니다. – FistOfFury

+0

동의어를 사용하면 원격 서버에 액세스 할 때 성능에 영향을 미칩니 까? –

3

당신은 실제로는 동의어 외에 (완전히 빈 데이터베이스에이해야 비록로 작동하도록하여 빈 데이터베이스에 동의어를 생성하고 다른 데이터베이스의 개체에 참조 할 수 있습니다 물론 당신이 만든).

11

동의어는 명료 한 이름 또는 원격 테이블, 뷰, 프로 시저 및 기능에 친숙한 로컬 이름을 사용할 수있게 해주는 훌륭한 추상 계층을 제공합니다. 예를 들어

EmployeeABC 및 테이블 이름으로 server1 및 DBSCHEMA이 지금 쿼리 작업을 수행 할 Server2Employee 테이블에 액세스 할 필요가 고려하십시오.

따라서 Server1.ABC.Employee과 같이 사용해야하며 모든 ServerName, SchemaName 및 TableName을 노출합니다.

대신이의 당신은 그래서 당신은 Select * from Peoples p1 inner join EmpTable emp where emp.Id=p1.ID

처럼 액세스 할 수있는 동의어 링크 Create Synonym EmpTable for Server1.ABC.Employee

를 만들 수 있습니다 그래서 추상화, 변경의 용이성, 확장 성의 장점을 제공합니다.

나중에 서버 이름이나 스키마 또는 tablename을 변경하려는 경우 동의어 만 변경하면 모두 검색하고 바꿀 필요가 없습니다.

당신이 그것을 사용한다면 당신은 동의어의 진정한 이점을 느낄 것입니다. 또한 연결된 서버와 결합하여 개발자에게 더 많은 이점을 제공 할 수 있습니다.

+0

동의어를 사용하면 원격 서버에 액세스 할 때 성능에 어떤 영향을 미칩니 까? –

4

저는 오랫동안 오라클 개발자였으며 ​​SQL Server로 옮겨 왔습니다.

그러나 동의어에 대한 또 다른 유용한 용도는 개발주기입니다. 동일한 스키마를 수정하는 개발자가 여러 명인 경우 동의어를 사용하여 "프로덕션"테이블을 직접 수정하지 않고 자신의 스키마를 가리킬 수 있습니다. 그건 당신이 당신의 일을 할 수있게 해주고 다른 개발자들은 당신이 수정과 디버깅을하는 동안 영향을받지 않을 것입니다. 나는 SQL Server 2008의 다음을 볼 수있어 기뻐요

...

4

동의어는 다음과 같은 목적으로 제공하는 데이터베이스 객체입니다

  • 다른 데이터베이스 개체에 대한 대체 이름을 제공을 언급 기본 객체로 로컬 또는 원격 서버에 존재할 수 있습니다.
  • 기본 객체의 이름이나 위치에 대한 변경 사항으로부터 클라이언트 응용 프로그램을 보호하는 추상화 계층을 제공합니다.

첫 번째 질문은 필요하지 않지만 두 번째 질문은 도움이됩니다.

msdn is your friend

관련 문제