2017-05-24 1 views
0

결과를 수집하기 위해 SQL을 쓰고 있습니다. 그러나 결과는 여러 데이터베이스 (연간)에 저장됩니다. [Results2015], [Results2016], [Results2017].SQL 데이터베이스 와일드 카드

나는 모든 테이블 이름이 각 데이터베이스 내에서 동일하기 때문에 이러한 모든 것을 결합 할 수 있습니다.

제 문제는 2018 년에 새로운 데이터베이스가 생길 때입니다 [Results2018]. 와일드 카드와 비슷한 [Results20]을 사용하여 데이터베이스에서 정보를 수집 할 수있는 방법이 있습니까? 따라서 매년 다른 연합을 추가하여 SQL을 변경하지 않아도됩니다.

도움을 주시면 감사하겠습니다.

+0

어느 [DBMS] (https://en.wikipedia.org/wiki/DBMS)를 사용하고 있습니까? 포스트그레스? 신탁? –

+1

동적 SQL을 사용해 보셨습니까? – Jonny

+0

Microsoft T-SQL –

답변

0

로컬 테이블과 함께 사용하거나 로컬 임시 테이블에 삽입 할 수있는 모든 테이블 또는 데이터베이스의 집계로 선택 쿼리를 만들 수 있습니다. 이 시점 이후에 귀하의 고유 한 데이터 소스가되었습니다.

예 :

Declare @mydata table (name varchar(50), country varchar(10), population int) 

insert @mydata 
Select col1 as name, col2 as country,col5 as population from new_york.dbo.table_a 
union all 
Select col3, col12, col55 from Pittsburgh.dbo.table_t 
union all 
Select col1, col2,col5 from Rio.dbo.table_ab 

-- after it just use @mydata as data source 

내가 당신을 도울 희망, 모든 최고의

0

사용 동적 SQL :

declare @MytabName varchar(128) 
declare @v_sql varchar(max) 
declare @cnt  integer = 1 

while @cnt < datepart("y", getdate())-2000 
loop 
set @MytabName = 'Results20' + @cnt 
set @v_sql = 
'insert into ' + @MytabName + ' 
select t1.stuff 
from [db].[schema].[table] t1 
where t1.SomeColumn = ''SomeValue'' ' 

EXECUTE sp_executesql @v_sql 

set @cnt = @cnt+1 
end