2

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

它们具有相同的结构。

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

这是在 SQL Server 2008 Express 中。

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

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

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

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

4

2 回答 2

3

一个快速的动态 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)
于 2013-11-08T16:27:12.760 回答
1

您可以使用这样的简单查询来构建大型查询:

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)
于 2013-11-08T16:25:42.077 回答