2012-04-26 2 views
0

데이터베이스에 새 테이블을 만드는 업데이트 된 테이블이 여러 개 있습니다 (드물게). 그런 다음 사례 기능을 사용하여 이러한 역사적인 테이블을 쿼리하도록 내 보고서를 업데이트해야합니다. 필자가 제공해야하는 보고서의 수를 감안할 때, 이것은 오랜 연습이며, 길다란 사례 문 & 전체 외부 조인으로 인해 보고서가 실적이 저조하다는 것을 의미합니다. 나는 일종의 와일드 카드를 사용하여 데이터를 추출하기 위해 비슷한 이름을 가진 테이블을 조사하기를 원했다. (필자가 필요로하는 모든 컬럼은 같은 이름을 가지고있다.) 그래서 데이터베이스가 업데이트 될 때마다 내 모든 쿼리를 다시 작성하십시오. 예 :SQL Server 동적 SQL이 여러 테이블에서 동일한 열을 선택합니다.

Table1.PaymentStatus 
Table1.Amount 
Table2.PaymentStatus 
Table2.Amount 
.... 
TableX.PaymentStatus 
TableX.Amount 

내가 필요 필드인가 ->

Payment Status Amount 
All Data   All Data 

다행스럽게도 필자는 연합 전체를 포함한 동적 SQL의 일종을 만들 수, 다음 내 테이블의 나머지 하위 쿼리 이런 종류의 연결합니다. 나는 동적 SQL에 대한 많은 경험이 없다. &은 & 포럼에서이 쿼리를 발견했다. (그리고 동시에 배우기도하지만) 많은 행운이 없다.

declare @columns table (idx int identity(1,1), table_name varchar(100), column_name varchar(50)) 

insert into @columns (table_name, column_name) 
select table_name, column_name 

from INFORMATION_SCHEMA.COLUMNS 

where table_name like '%Special%' 

declare @sql nvarchar(4000) 

declare @i int 
declare @cnt int 

declare @col varchar(100) 
declare @table varchar(100) 

select @i = 0, @cnt = max(idx), @sql = '' from @columns 

select * 
from @columns 

while @i < @cnt 
begin 
    select @i = @i + 1 

    select @col = column_name, @table = table_name from @columns where idx = @i 

    if len(@sql) > 0 
     select @sql = @sql + ', ' 

    select @sql = @sql + '[' + @table + '].[' + @col + '] as [' + @table + '_' + @col + ']' 
end 

select @sql = 'select ' + @sql + ' from *' 

exec sp_executesql @sql 

내가보기를 만들고 난 단지이보기 업데이트가 발생할 때마다 업데이트 할 필요가 있으므로이보기에 내 쿼리를 연결하지만, 더 자동 솔루션이 있었는지 궁금 해서요에 대한 또 다른 제안을 했어. 불행히도 이러한 사본이 작성되는 방식을 제어 할 권한이 없습니다.

감사합니다.

답변

0

테이블을 래핑하는보기를 만든 다음 최신 테이블을 사용하여보기를 삭제하고 다시 만드는 쿼리를 작성합니다.

그러면 테이블이 변경 될 때마다 해당 쿼리를 한 번 실행할 수 있습니다.

sys.tables를 쿼리하여 테이블 목록을 가져올 수 있습니다.

관련 문제