我有一堆表,名称中的前几个字符相同,但这些表的名称末尾有随机数(长度相等)。
它们具有相同的结构。
我想将它们动态地合并到一张表中。
这是在 SQL Server 2008 Express 中。
我真的不知道如何做到这一点,但我猜我必须遍历表名列表,也许使用系统表中的列表?
示例(这说明了我头脑简单的想法,因为我确信这没有真正的技术意义)
SELECT * FROM TABLE0*
UNION ALL
SELECT * FROM TABLE0*
注意 '*' 是一个 8 位数字。
我有一堆表,名称中的前几个字符相同,但这些表的名称末尾有随机数(长度相等)。
它们具有相同的结构。
我想将它们动态地合并到一张表中。
这是在 SQL Server 2008 Express 中。
我真的不知道如何做到这一点,但我猜我必须遍历表名列表,也许使用系统表中的列表?
示例(这说明了我头脑简单的想法,因为我确信这没有真正的技术意义)
SELECT * FROM TABLE0*
UNION ALL
SELECT * FROM TABLE0*
注意 '*' 是一个 8 位数字。
一个快速的动态 SQL 脚本应该可以做到:
declare @sql varchar(max)
set @sql = ''
select @sql = @sql + case len(@sql) when 0 then '' else ' UNION ALL ' end + '
SELECT * FROM [' + table_name + ']'
from
information_schema.tables where table_name like 'TABLE0%'
exec (@sql)
您可以使用这样的简单查询来构建大型查询:
SELECT 'SELECT * FROM '+name+ ' UNION '
FROM sys.tables
WHERE name LIKE '%yourtable%'
或者您可以使用动态 SQL 来构建并运行它:
DECLARE @sql VARCHAR(MAX)
SET @sql = ''
SELECT @sql = @sql +'
UNION ALL
SELECT * FROM ['+name+']'
FROM sys.tables
WHERE name LIKE '%yourtable%'
SET @sql = STUFF(@sql,1,15,'')
EXEC(@sql)