我有多个表(经常不经常更新),这会在我的数据库中创建新表。然后,我必须使用案例函数更新我的报告以查询这些历史表。鉴于我必须提供的报告数量,这是一个冗长的练习,这可能意味着我的报告由于冗长的案例陈述和表现而表现不佳。全外连接。我希望使用某种通配符来查看这些类似命名的表来提取数据(我需要的列都具有相同的名称),这样每次更新数据库时,我都不需要重写我的所有查询。例如
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
我有另外一个关于创建视图并将我的查询链接到此视图的建议,因此每次更新时我只需要更新此视图,但是想知道是否有更自动的解决方案。不幸的是,我无法控制这些副本的创建方式。
谢谢!
答案 0 :(得分:0)
创建一个包含表的视图,然后编写一个查询,使用最新的表删除并重新创建视图。
然后,只要表格发生变化,您就可以运行一次该查询。
您可以通过查询sys.tables来获取表的列表。