有没有一种方法可以根据 table 模式的查询创建多个 table 的 SQL 视图?
Is there a way I create a SQL view of multiple tables based on a query of the table schema?
我有一个 SQL 数据库,其中有多个 table 由其他人维护,我想联合起来创建一个视图。问题是 table 的数量还在不断增加!列和字符长度相同。
我可以使用
创建 table 的列表
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'Table%'.
目前我有一个联合所有查询,如下所示
SELECT * FROM table1
UNION ALL
SELECT * FROM table2;
但是 table 名单还在不断增加。有什么我可以创建一些东西来循环思考 tables 吗?像
*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;
还有一点要考虑,你需要确保字段计数是相同的手之前也是为了安全起见,最好避免 select * 并使用字段名称你需要的。这应该在存储过程中生成 SQL 到 运行 的语句,如评论中所述。花一些时间来解决这个错误,并如前所述对字段名称的连续性进行必要的检查。
我有一个 SQL 数据库,其中有多个 table 由其他人维护,我想联合起来创建一个视图。问题是 table 的数量还在不断增加!列和字符长度相同。
我可以使用
创建 table 的列表SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'Table%'.
目前我有一个联合所有查询,如下所示
SELECT * FROM table1
UNION ALL
SELECT * FROM table2;
但是 table 名单还在不断增加。有什么我可以创建一些东西来循环思考 tables 吗?像
*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;
还有一点要考虑,你需要确保字段计数是相同的手之前也是为了安全起见,最好避免 select * 并使用字段名称你需要的。这应该在存储过程中生成 SQL 到 运行 的语句,如评论中所述。花一些时间来解决这个错误,并如前所述对字段名称的连续性进行必要的检查。