0

データベースに新しいテーブルを作成する更新される (かなりまれに) 複数のテーブルがあります。次に、case 関数を使用してレポートを更新し、これらの履歴テーブルにクエリを実行する必要があります。私が提供しなければならないレポートの数を考えると、これは長い演習であり、長いケース ステートメントと完全な外部結合が原因でレポートのパフォーマンスが低下していることを意味する可能性があります。ある種のワイルドカードを使用して、これらの同様の名前のテーブルを調べてデータを抽出することを望んでいました (必要な列はすべて同じ名前です)。データベースが更新されるたびに、すべてのクエリを書き直してください。例えば

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

私が必要とするフィールドはありますか - >

Payment Status   Amount
All Data         All Data   

うまくいけば、Union All を含むある種の動的 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

ビューを作成してクエリをこのビューにリンクすることについて別の提案があったので、更新が発生するたびにこのビューを更新するだけで済みますが、より自動的な解決策があるかどうか疑問に思っていました. 残念ながら、これらのコピーの作成方法を制御することはできません。

ありがとう!

4

1 に答える 1

0

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

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

sys.tables にクエリを実行すると、テーブルの一覧を取得できます。

于 2012-04-26T11:00:35.543 に答える