SQL Server 2008에서 SYNONYM을 어떻게 사용합니까?SQL Server 2008에서 SYNONYM을 어떻게 사용합니까?
답변
(here) 다른 테이블의 별칭을 만들면 쉽게 참조 할 수 있습니다. 마찬가지로
select * from table longname as ln
그러나 영구 및 보급.
편집 : 사용자 정의 기능, 로컬 및 원격 개체, 테이블뿐만 아니라 작동합니다. 다른 프로덕션 서버에 에 액세스하십시오 클라이언트 테이블에 필요한 사용자 데이터베이스에 저장 프로 시저 이 있다면
이 의 유용성의 예는 수 있습니다. 데이터베이스 사용자에서 저장 프로 시저를 만든 것으로 가정하면 을 다음과 같은 동의어로 설정해야 할 수 있습니다. USE Users; SYNONYM 클라이언트 생성 For Offsite01.Production.dbo.Clients; 저장 프로 시저 를 작성하는 대신 전체 별칭이 액세스 할 때마다 테이블 방금 별칭을 클라이언트를 사용할 수 있음을 작성할 필요하면 지금
이동합니다. 혹시 위치 또는 프로덕션 데이터베이스 위치의 이름을 변경 경우 또한, 할 수있는 모든 당신 필요가 대신 이전 서버를 참조하는 모든 저장 프로 시저를 수정할 필요없이 하나의 동의어 을 수정합니다. 에서
, 당신은 당신이 통제 할 수없는 이상 원격 객체를 처리 할 수 있습니다. 예를 들어 다른 부서 나 팀에서 유지 관리하는 데이터베이스입니다.
동의어를 사용하면 SQL 코드에서 기본 객체의 이름과 위치를 분리 할 수 있습니다. 이렇게하면 원하는 테이블이 새 서버/데이터베이스로 이동되거나 이름이 바뀌더라도 동의어 테이블을 대상으로 코드를 작성할 수 있습니다.
예를 들어, 나는 다음과 같은 쿼리를 작성할 수
insert into MyTable
(...)
select ...
from remoteServer.remoteDatabase.dbo.Employee
하지만 서버 또는 데이터베이스, 스키마 또는 테이블 내 코드에 영향을 미칠 것이다 변경하는 경우. 대신 내가 대신 동의어를 원격 서버에 대한 동의어를 생성하고 사용할 수 있습니다
insert into MyTable
(...)
select ...
from EmployeeSynonym
를 기본 객체가 위치 나 이름을 변경하는 경우, 난 단지 새 개체를 가리 키도록 내 동의어를 업데이트해야합니다.
당신은 실제로는 동의어 외에 (완전히 빈 데이터베이스에이해야 비록로 작동하도록하여 빈 데이터베이스에 동의어를 생성하고 다른 데이터베이스의 개체에 참조 할 수 있습니다 물론 당신이 만든).
동의어는 명료 한 이름 또는 원격 테이블, 뷰, 프로 시저 및 기능에 친숙한 로컬 이름을 사용할 수있게 해주는 훌륭한 추상 계층을 제공합니다. 예를 들어
는 Employee
로 ABC
및 테이블 이름으로 server1
및 DBSCHEMA이 지금 쿼리 작업을 수행 할 Server2
에 Employee
테이블에 액세스 할 필요가 고려하십시오.
따라서 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을 변경하려는 경우 동의어 만 변경하면 모두 검색하고 바꿀 필요가 없습니다.
당신이 그것을 사용한다면 당신은 동의어의 진정한 이점을 느낄 것입니다. 또한 연결된 서버와 결합하여 개발자에게 더 많은 이점을 제공 할 수 있습니다.
동의어를 사용하면 원격 서버에 액세스 할 때 성능에 어떤 영향을 미칩니 까? –
저는 오랫동안 오라클 개발자였으며 SQL Server로 옮겨 왔습니다.
그러나 동의어에 대한 또 다른 유용한 용도는 개발주기입니다. 동일한 스키마를 수정하는 개발자가 여러 명인 경우 동의어를 사용하여 "프로덕션"테이블을 직접 수정하지 않고 자신의 스키마를 가리킬 수 있습니다. 그건 당신이 당신의 일을 할 수있게 해주고 다른 개발자들은 당신이 수정과 디버깅을하는 동안 영향을받지 않을 것입니다. 나는 SQL Server 2008의 다음을 볼 수있어 기뻐요
...
동의어는 다음과 같은 목적으로 제공하는 데이터베이스 객체입니다
- 다른 데이터베이스 개체에 대한 대체 이름을 제공을 언급 기본 객체로 로컬 또는 원격 서버에 존재할 수 있습니다.
- 기본 객체의 이름이나 위치에 대한 변경 사항으로부터 클라이언트 응용 프로그램을 보호하는 추상화 계층을 제공합니다.
첫 번째 질문은 필요하지 않지만 두 번째 질문은 도움이됩니다.
- 1. SQL Server 2008에서 Sybase로 복제를 사용합니까?
- 2. 어떻게 SQL Server 2008에서 많은 프로세스를 죽일?
- 3. SQL Server 2008에서 SQL Server Compact Edition으로?
- 4. SQL Server 2008에서 SQL Express로 데이터 복사
- 5. SQL Server 2008에서 트리거 만들기
- 6. SQL Server 2008에서 'sa'암호가 변경되었습니다.
- 7. SQL Server 2008에서 데이터베이스 복원
- 8. SQL Server 2008에서 SQL 프로필러는 어디에 있습니까?
- 9. SQL Server 2008에서 긴 동적 SQL 디버깅
- 10. SQL Server 2008에서 SQL Server 7 DTS 실행
- 11. SQL Server 2005 및 SQL Server 2008에서 SCHEMA의 차이점은 무엇입니까?
- 12. SQL Server 2008에서 SQL Server 2008 R2로 업그레이드
- 13. SQL Server Express 2008에서 SQL Server 인증을 사용할 수 없습니다.
- 14. SQL Server 2008에서 백업을 예약하는 방법은 무엇입니까?
- 15. SQL Server 2008에서 varchar를 십진수로 변환
- 16. SQL Server 2008에서 ID 속성을 변경하려면 어떻게해야합니까?
- 17. SQL Server 2008에서 MS 액세스 2007로 마이그레이션
- 18. SQL Server 2008에서 2005로 데이터베이스 이동
- 19. SQL Server 2008에서 다중 선택 필드 저장
- 20. SQL Server 2008에서 Active Directory 쿼리
- 21. SQL Server 2008에서 XML 변수의 크기 제한
- 22. SQL Server 2008에서 2 바이트 문자 검색
- 23. SQL Server 2008에서 대량 전자 메일 보내기
- 24. SQL Server 2008에서 날짜와 시간 검색
- 25. SQL Server 2008에서 이미지를 업데이트하는 쿼리
- 26. SQL Server 2008에서 TDE의 성능 오버 헤드
- 27. SQL Server 2008에서 날짜를 찾는 방법은 무엇입니까?
- 28. SQL Server 2008에서 case 문을 사용하여 삭제
- 29. SQL Server 2008에서 잘못된 날짜 찾기
- 30. SQL Server 2008에서 스크립트를 만드는 방법은 무엇입니까?
나는 this->을 선택 IDENT_CURRENT ('<동의어 이름>')와 같은 기능을 사용하여 삽입 된 행의 현재 ID 값을 알고받을 수 있습니까? 그 테이블의 최대 (ID)를 수행하여 ID 값을 얻고 싶지 않습니다. 가능한가? – ivorykoder
@ivorykoder 아니요. 아는 한, 구문은 작동하지 않습니다. – FistOfFury
동의어를 사용하면 원격 서버에 액세스 할 때 성능에 영향을 미칩니 까? –