2009-10-19 3 views
0

테이블 이름 목록을 기반으로 일련의 SQL 테이블을 조인 할 방법을 찾고 있습니다. 시스템이 커지면 테이블 이름 목록이 변경 될 수 있지만 테이블이 커지면 모든 테이블에서 조인이 작동하는지 확인해야합니다.SQL 이름 목록에 기반한 테이블 조인

목록의 각 테이블에는 ActivityID라는 공통 열이 있으며이 열은 조인의 원본 테이블 인 Activity 테이블에 대한 외부 키입니다.

저는 아마도 varchar를 만들고 실행하기 전에 쿼리를 작성하는 것에 대해 생각했습니다. 이것이 최선의 방법입니까? 아니면 varchar를 사용하지 않고 조인 구문을 만들 수 있습니까?

+0

"sql"및 "server"대신 "sql-server"태그를 사용하셨습니까? – Andomar

답변

1

나는 쿼리를 뷰에 넣을 것이다. 새 테이블을 추가 할 때 새 테이블을 포함하도록보기를 변경하십시오. 동적 SQL보다 훨씬 효율적입니다. 당신이 통제하지 않으면 테이블을 추가 할 때

사람/다음 동적 SQL과 같은 무언가가 SQL 서버에서 작동합니다 :

declare @query nvarchar(max) 
set @query = 'select * from t1 ' 

select 
    @query = @query + 'left join ' + name + 
     ' on t1.ActivityID = ' + name + '.ActivityID ' 
from sys.tables 
where name like '%Activity%' 

exec (@query) 

을 다시, 나는 호출 프로그램이 기대하는 어떤 필드 알고 궁금해 .

+0

처음에 생각한 것처럼 동적으로 결합 된 동일한 SQL을 생각하고있는 것처럼 보입니다. 이 경로를 사용하여 진행하겠습니다. –

1

표준 SQL은이를 수행 할 수 없습니다. 그것은 어쨌든 일반적으로 나쁜 디자인입니다. 일부 공급 업체는 Oracle에서 익명의 PL/SQL 블록에 EXECUTE IMMEDIATE을 추가 할 수있는 확장 기능을 제공합니다.

외부에서 문을 작성하거나 문을 작성하고 실행하려면 저장 프로 시저 같은 것을 사용해야합니다.

+0

데이터베이스 디자인을 제어 할 권한이 없습니다. 문제의 데이터베이스는 모든 측면에서 매우 일반적인 기본 Microsoft CRM 데이터베이스입니다. 관계 인스턴스 정보를 제공하는 테이블을 식별 할 수 없기 때문에 다른 방법으로 조인해야하는 테이블을 찾아야합니다. 다른 사람이 데이터베이스에서 CRM의 기존 관계를 어떻게 쿼리 할 수 ​​있는지 알고 있습니까? –