0

我有多个更新的表(很少)在我的数据库中创建新表。然后,我必须使用 case 函数更新我的报告以查询这些历史表。鉴于我必须提供的报告数量,这是一项冗长的练习,这可能意味着我的报告由于冗长的案例陈述和完整的外部连接而表现不佳。我希望使用某种通配符来查看这些名称相似的表以提取数据(我需要的列都具有相同的名称),这样每次更新数据库时,我都不需要重写我所有的查询。例如

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

是我需要的字段吗->

Payment Status   Amount
All Data         All Data   

希望我可以创建某种动态 sql,包括 Union All,然后将这种子查询链接到我的其余表。我对动态 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

创建一个视图,一个包装表的视图,然后编写一个查询,使用最新的表删除并重新创建视图。

然后,只要表发生更改,您就可以运行该查询一次。

您可以通过查询 sys.tables 来获取表的列表。

于 2012-04-26T11:00:35.543 回答