我有多个更新的表(很少)在我的数据库中创建新表。然后,我必须使用 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
我有另一个关于创建视图并将我的查询链接到这个视图的建议,所以我只需要在每次更新时更新这个视图,但想知道是否有更自动化的解决方案。不幸的是,我无法控制这些副本的创建方式。
谢谢!