我有一个SQL数据库,其中有多个由其他人维护的表,我想将这些表连接起来创建一个视图。问题是表的数量不断扩大!列和字符长度相同。
我可以使用创建一个表列表
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'Table%'.
目前我有一个像下面一样的联合所有查询
SELECT * FROM table1
UNION ALL
SELECT * FROM table2;
但排行榜一直在增长。有什么我可以创建的东西来循环思考表格吗?类似的东西
*SELECT * FROM (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'Table%') UNION ALL*
我知道这行不通,但我希望有某种技巧可以一直走下去!如果有帮助的话,这是在SQL Server 2012上。
感谢
declare @s nvarchar(max);
set @s=''
select
@s=@s +'(select * from [' + s.name + '])'+
case when ROW_NUMBER() over (order by s.name) != count(*) over ()
then
' UNION ALL '
else
''
end
from
sys.tables as s
where s.name like 't%'
print @s;
还有一点需要考虑,你需要确保字段计数在手之前是相同的。为了安全起见,最好避免选择*并使用你需要的字段名称。这应该会生成SQL语句,以便在存储过程中运行,如注释中所述。花一些时间捕捉错误,并对字段名称的连续性进行必要的检查。