저는 며칠 동안이 작업을 해왔고 적절한 해결책을 찾지 못했습니다. 누군가 도와 드릴 수 있기를 바랍니다.UNION 뷰를 동적 뷰로 다시 작성하십시오.
동일한 구조의 여러 데이터베이스 서버 (SQL Server)가 연결된 서버로 연결되어 있습니다.
- 우리는 서버를 추가 할 때, 우리는 전망을 수정해야합니다 :
CREATE VIEW Things_view AS SELECT id, thing FROM server1.database1.dbo.stuff UNION ALL SELECT id, thing FROM server2.database2.dbo.stuff UNION ALL SELECT id, thing FROM server3.database3.dbo.stuff
이 몇 가지 문제가 있습니다 : 우리는 모든 서버에서 노동 조합의 데이터가 있다는 견해 무리가있다.
- 개발 환경에 개의 데이터베이스와 동일한 숫자의 데이터베이스가 필요하고 개의 가짜 서버가 있으므로 개의 뷰를 설치할 수 있습니다.
- 일부 서버 에는 에 다른 서버의 데이터가 개 포함되어 있지 않습니다. 오늘날 우리는 이러한 서버에 대한 사용자 지정보기를 사용하여이 작업을 수행하지만 이는 배포상의 악몽입니다.
그래서 저는 이것을 동적으로 다시 쓰고 싶습니다. 목표는 다음과 같습니다.
- 에 다른 수의 데이터베이스가 포함되도록 허용합니다. 그들은 에 단일 서버에 2 개 이상의 데이터베이스가있을 가능성이 있습니다.
- 에 각 서버에 대해 에 포함될 다른 서버를 지정하는 방법을 결과에 포함하십시오.
- 솔루션이 다소 유지 될 수 있도록 복잡성을 최소화하여 유지 관리 할 수있는 부분은 다소 입니다.
- 소스가 제어되고 모든 서버에 사용할 수있는 솔루션 하나를 만듭니다.
그리고 가장 중요한 : 우리는 우리의 전체 응용 프로그램을 다시 작성하지 않아도
- 이 같은 이름의보기로 노출.
물론 뷰나 함수에서 동적 SQL을 수행 할 수 없습니다. 저장 프로 시저로 다시 작성한 다음 OPENROWSET trick을 사용하여 저장된 proc을 뷰에서 쿼리했습니다. 데이터베이스 이름으로 proc를 완전히 한정해야하기 때문에 (데이터베이스 이름이 다르기 때문에)보다 동적 인 SQL이 필요했습니다. 그런 다음 마스터 데이터베이스에서 동의어를 속일 생각을했으나 유지 관리 및 소스 제어 목표를 위반했습니다.
필요하다면 서버 이름과 데이터베이스 이름 및 포함 플래그가있는 새 테이블을 만들면 문제가 없습니다. 실제로 이것은 각 환경에 대한 구성을 중앙 집중식으로 관리하기 때문에 이상적입니다.
저는 이것으로 완전히 당황했습니다. 이제 인터넷에 도움을 청합니다.당신이 최신 SQL 서버를
보기를 사용해야합니까? 저장된 procs 가능합니까? – gbn
저장된 proc은 궁극적으로 응용 프로그램에 동일한 이름의 뷰로 노출되는 한 괜찮습니다. – vincentj
번호/서버 이름 변경 빈도는 얼마나됩니까? 데이터가 실시간이어야합니까? –