2012-04-26 15 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

ビューを作成するビューを作成し、最新のテーブルを使用してビューを削除して再作成するクエリを作成します。

テーブルが変更されるたびに、そのクエリを1回実行することができます。

sys.tablesを照会することで、テーブルのリストを取得できます。

関連する問題