我有以下问题。我继承了一个为每个客户使用数据库前缀的软件。 所有表都具有相同的结构和列。对于数据迁移到新版本,我想要联合所有这些表 并设置一个客户外键,并摆脱所有子表。我正在寻找一种创造方式 这个任务的视图,因为我现在也希望保持向后兼容。 我发现这个动态查询似乎做了我想要的 但是我无法在我的mysql服务器上执行。我假设它是为另一个sql server编写的。
表名结构是(大约80个客户表): customer1_faxe customer2_faxe customer3_faxe customer4_faxe ...
你会如何解决这个问题?
DECLARE @SelectClause VARCHAR(100) = 'SELECT *'
,@Query VARCHAR(1000) = ''
SELECT @Query = @Query + @SelectClause + ' FROM ' + TABLE_NAME + ' UNION ALL '
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE '%_faxe'
SELECT @Query = LEFT(@Query, LEN(@Query) - LEN(' UNION ALL '))
EXEC (@Query)
答案 0 :(得分:0)
此查询使用SQL Server语法。你需要这样的东西:
declare @SelectClause varchar(8000);
declare @Query varchar(8000);
set @SelectClause = 'SELECT *';
SELECT @Query := group_concat(@SelectClause, ' FROM ', TABLE_NAME SEPARATOR ' UNION ALL ')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE '%_faxe';
prepare stmt from @Query;
execute stmt;
请注意,带有group_concat()
的{{1}}简化了逻辑。