You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将返回表名的子查询结果作为SELECT语句的表名使用

批量查询指定库中含指定列的表的最大更新时间

已知通过以下SQL可以获取testdatabase数据库中所有包含last_update列的表名:

SELECT DISTINCT TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN ('last_update')
    AND TABLE_SCHEMA='testdatabase'

要对这些表逐个执行SELECT MAX(last_update) FROM [表名]并汇总结果,可以用动态SQL实现,以下是主流数据库的实现方式:

MySQL 实现

SET @sql = NULL;
SELECT GROUP_CONCAT(
    CONCAT('SELECT ''', TABLE_NAME, ''' AS table_name, MAX(last_update) AS max_last_update FROM ', TABLE_NAME)
    SEPARATOR ' UNION ALL '
) INTO @sql
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'last_update'
  AND TABLE_SCHEMA = 'testdatabase';

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

这段代码会自动拼接所有表的查询语句,通过UNION ALL合并结果,最终返回每个表的名称及其对应的最大last_update值。

SQL Server 实现

DECLARE @sql NVARCHAR(MAX);
SELECT @sql = STRING_AGG(
    CONCAT('SELECT ''', TABLE_NAME, ''' AS table_name, MAX(last_update) AS max_last_update FROM ', QUOTENAME(TABLE_NAME)),
    ' UNION ALL '
)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'last_update'
  AND TABLE_SCHEMA = 'testdatabase';

EXEC sp_executesql @sql;

使用STRING_AGG拼接查询语句,QUOTENAME处理表名中的特殊字符,确保语句执行安全。

内容的提问来源于stack exchange,提问作者CRoNiC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 19:52:10