2016-07-24 2 views
0

테이블이 [Log] 인 여러 응용 프로그램 데이터베이스가 있습니다. 비슷한 로그 테이블을 가진 하나의 중앙 데이터베이스가 있지만 TenantId이라는 추가 열이 하나 있습니다. TenantIdDatabaseName 열이있는 Tenant 테이블도 있습니다. 이러한 DatabaseName에는 응용 프로그램 데이터베이스의 이름이 들어 있습니다.SQL Server : 다른 데이터베이스에서 데이터 수집

이제 모든 응용 프로그램 데이터베이스를 루프하고 응용 프로그램 데이터베이스 이름에 속하는 TenantId과 함께 로그 항목을 중앙 로그 테이블에 복사하려고합니다.

응용 프로그램 데이터베이스에서 많은 프로 시저를 만드는 대신 중앙 데이터베이스에서 프로 시저를 작성할 수 있습니까? 모든 데이터베이스는 동일한 SQL Server 인스턴스에 있습니다.

SELECT name 
FROM master.dbo.sysdatabases 

을 다음 각 데이터베이스의 데이터를 얻을 현재 데이터베이스에 하나 개의 테이블에 삽입 커서를 사용할 수 있습니다

+0

연결된 서버를 사용해보십시오. 나머지는 쉬워야합니다. –

+0

또 다른 접근법은 일부 동적 SQL입니다. 이것은 일회성 행사입니까, 아니면 통합 일정을 잡으시겠습니까? –

답변

1

몇 가지 빠른 동적 SQL. 아래의 예에서 CHINRUS는 중앙 데이터베이스이므로 통합에서 제외됩니다.

서버의 기타 데이터베이스를 제외하도록 WHERE를 조정해야한다고 덧붙여 야합니다. 또 다른 옵션은 적절한 정의가있는 테이블을 유지하는 것입니다.

Declare @LogTable varchar(100)='[Chinrus].[dbo].[TransactionLog]' 
Declare @CentralDB varchar(100)='Chinrus' 

Declare @SQL varchar(max) = '' 

Select @SQL = @SQL + SQL 
From (
     Select Name,SQL=';Insert Into '[email protected]+' Select *,TenantId='''+Name+''' From ['+Name+'].[dbo].[TransactionLog] ' 
     From master.dbo.sysdatabases 
     Where Name<>@CentralDB 
    ) A 

Select @SQL 
--Exec(@SQL) 
1

당신은 다음과 같은 쿼리를 모든 데이터베이스의 목록을 얻을 수 있습니다.

관련 문제