我有一堆表,名称中的前几个字符相同,但表格的名称末尾有随机数字(长度相等)。
它们具有相同的结构。
我想动态地将它们合并到一个表中。
这是在SQL Server 2008 Express中。
我不知道如何做到这一点,但我猜我必须通过表名列表循环,也许使用系统表中的列表?
示例(这说明了我简单的思想,因为我确信这没有真正的技术意义)
SELECT * FROM TABLE0*
UNION ALL
SELECT * FROM TABLE0*
注意'*'是一个8位数字。
答案 0 :(得分:2)
快速动态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)
答案 1 :(得分:1)
您可以使用这样的简单查询来构建大型查询:
SELECT 'SELECT * FROM '+name+ ' UNION '
FROM sys.tables
WHERE name LIKE '%yourtable%'
或者您可以使用动态SQL来构建并运行它:
DECLARE @sql VARCHAR(MAX)
SET @sql = ''
SELECT @sql = @sql +'
UNION
SELECT * FROM ['+name+']'
FROM sys.tables
WHERE name LIKE '%yourtable%'
SET @sql = STUFF(@sql,1,15,'')
EXEC(@sql)
- UNION
应该ALL
由于防火墙设置而无法将单词发布在一起。