SQL数据库通配符

时间:2017-05-24 13:46:21

标签: sql database wildcard

我正在编写一些SQL来收集结果。然而,结果存储在多个数据库中(每年)。 [结果2015],[结果2016],[结果2017]。

我可以将这些全部合并在一起,因为每个数据库中的所有表名都是相同的。

我的问题是,当我们到2018年将会有一个新的数据库[Results2018]。有没有办法可以使用类似于通配符的[Results20]从数据库中收集信息,因此不必每年通过添加另一个联合来更改SQL。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

您可以创建一个选择查询作为您拥有的每个表或数据库的聚合,然后可以在本地临时表中使用或插入。在此之后它成为您独特的数据源。

例如:

Declare @mydata table (name varchar(50), country varchar(10), population int)

insert @mydata
Select col1 as name, col2 as country,col5 as population from new_york.dbo.table_a
union all
Select col3, col12, col55 from Pittsburgh.dbo.table_t
union all
Select col1, col2,col5 from Rio.dbo.table_ab

-- after it just use @mydata as data source

我希望它能帮到你,一切顺利

答案 1 :(得分:0)

使用动态SQL:

declare @MytabName varchar(128)
declare @v_sql    varchar(max)
declare @cnt      integer = 1

while @cnt < datepart("y", getdate())-2000 
loop
set @MytabName = 'Results20' + @cnt
set @v_sql = 
'insert into ' + @MytabName + '
select t1.stuff
from [db].[schema].[table] t1
where t1.SomeColumn = ''SomeValue'' '

EXECUTE sp_executesql @v_sql

set @cnt = @cnt+1
end