从指定的表名中选择数据?

时间:2017-04-24 10:18:01

标签: sql sql-server-2008

我已经找到了答案,但不确定我是否一直在寻找正确的条款?

我希望有人可以提供帮助吗?

我有一个看起来像这样的查询

select name 
from CDSArchive.sys.tables
where name like '%OPARDENTIA%'
  and create_date >= '01 apr 2016'
ORDER BY create_date DESC

这给了我一个数据库中所有表的列表。这些表包含完全相同的列/数据,但是每个月都会生成一个新表,它会提取最新数据。

是否有可能编写一些在运行时自动将所有这些表联合起来的东西?例如,我想在本月底运行它,它会产生一个输出,这是所有联合表,包括今天早上生成的最新表?

我希望有人可以提供帮助吗?

非常感谢:)

1 个答案:

答案 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