SQL 数据库通配符
SQL Database Wildcard
我正在写一些 SQL 来收集结果。然而,结果存储在多个数据库中(每年)。例如。 [2015 年成绩], [2016 年成绩], [2017 年成绩].
目前我可以将这些全部合并在一起,因为所有 table 名称在每个数据库中都是相同的。
我的问题是,当我们来到 2018 年时,将会有一个新的数据库 [Results2018]。有没有一种方法可以通过使用类似于通配符的 [Results20] 从数据库中收集信息,因此不必通过每年添加另一个联合来更改 SQL。
如有任何帮助,我们将不胜感激。
您可以创建一个 select 查询作为每个 table 或您拥有的数据库的聚合,然后您可以使用或插入本地临时 table。在此之后,它成为您唯一的数据源。
例如:
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
希望对你有帮助,祝你一切顺利
使用动态 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
我正在写一些 SQL 来收集结果。然而,结果存储在多个数据库中(每年)。例如。 [2015 年成绩], [2016 年成绩], [2017 年成绩].
目前我可以将这些全部合并在一起,因为所有 table 名称在每个数据库中都是相同的。
我的问题是,当我们来到 2018 年时,将会有一个新的数据库 [Results2018]。有没有一种方法可以通过使用类似于通配符的 [Results20] 从数据库中收集信息,因此不必通过每年添加另一个联合来更改 SQL。
如有任何帮助,我们将不胜感激。
您可以创建一个 select 查询作为每个 table 或您拥有的数据库的聚合,然后您可以使用或插入本地临时 table。在此之后,它成为您唯一的数据源。
例如:
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
希望对你有帮助,祝你一切顺利
使用动态 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