如何在名称中查询带通配符的表

时间:2013-11-08 16:22:56

标签: sql sql-server-2008

我有一堆表,名称中的前几个字符相同,但表格的名称末尾有随机数字(长度相等)。

它们具有相同的结构。

我想动态地将它们合并到一个表中。

这是在SQL Server 2008 Express中。

我不知道如何做到这一点,但我猜我必须通过表名列表循环,也许使用系统表中的列表?

示例(这说明了我简单的思想,因为我确信这没有真正的技术意义)

SELECT * FROM TABLE0*
UNION ALL
SELECT * FROM TABLE0*

注意'*'是一个8位数字。

2 个答案:

答案 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由于防火墙设置而无法将单词发布在一起。