データベースに新しいテーブルを作成する更新される (かなりまれに) 複数のテーブルがあります。次に、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
ビューを作成してクエリをこのビューにリンクすることについて別の提案があったので、更新が発生するたびにこのビューを更新するだけで済みますが、より自動的な解決策があるかどうか疑問に思っていました. 残念ながら、これらのコピーの作成方法を制御することはできません。
ありがとう!