我已经找到了答案,但不确定我是否一直在寻找正确的条款?
我希望有人可以提供帮助吗?
我有一个看起来像这样的查询
select name
from CDSArchive.sys.tables
where name like '%OPARDENTIA%'
and create_date >= '01 apr 2016'
ORDER BY create_date DESC
这给了我一个数据库中所有表的列表。这些表包含完全相同的列/数据,但是每个月都会生成一个新表,它会提取最新数据。
是否有可能编写一些在运行时自动将所有这些表联合起来的东西?例如,我想在本月底运行它,它会产生一个输出,这是所有联合表,包括今天早上生成的最新表?
我希望有人可以提供帮助吗?
非常感谢:)
答案 0 :(得分:0)
你可以使用游标动态生成SQL(这在性能上并不是很糟糕,因为它只会迭代你所拥有的多个表 - 每月一个,每年12个 - 不那么痛苦)然后执行该动态查询。
declare @tableName varchar(100), @sql nvarchar(max) = '', @sqlInsert nvarchar(max) = ''
declare sqlcursor cursor for
select name
from sys.tables
where name like '%OPARDENTIA%' and create_date >= '01 apr 2016'
order by create_date desc
open sqlcursor
fetch next from sqlcursor into @tableName
while @@fetch_status = 0
begin
if @sql != '' set @sql += ' union all '
set @sql += ' select * from ' + @tableName
fetch next from sqlcursor into @tableName
end
select @sql
close sqlcursor
deallocate sqlcursor
set @sqlInsert = 'insert into YourNewTable select * from ( ' + @sql + ') as t'
select @sqlInsert
注意:在连接SELECT *
的{{1}}字符串时,我会明确选择列的名称,而不是@sql
。