SQL Server如何批量查询Prod架构下含mytime表的时间最大值
实现方案
你可以通过SQL Server的动态SQL拼接查询语句,批量执行后得到汇总结果,代码如下:
DECLARE @sql NVARCHAR(MAX) = N'' -- 拼接所有符合条件表的最大值查询,用UNION ALL合并结果 SELECT @sql += N'UNION ALL SELECT ''' + QUOTENAME(s.name) + '.' + QUOTENAME(t.name) + N''' AS table_name, MAX(mytime) AS max_mytime FROM ' + QUOTENAME(s.name) + N'.' + QUOTENAME(t.name) + N' ' FROM sys.tables t INNER JOIN sys.schemas s ON t.schema_id = s.schema_id INNER JOIN sys.columns c ON c.object_id = t.object_id WHERE s.name = 'Prod' AND c.name = 'mytime' -- 移除开头多余的UNION ALL关键字 SET @sql = STUFF(@sql, 1, 10, N'') -- 执行拼接好的动态SQL EXEC sp_executesql @sql
说明
- 代码直接复用了你原本的系统表筛选逻辑,不需要额外依赖之前写的CTE
- 用
QUOTENAME包裹架构名、表名,避免表名/架构名包含特殊字符、关键字时出现语法错误 - 如果需要后续使用查询结果,可以在动态SQL的第一个SELECT后增加
INTO #temp_result,执行完成后查询#temp_result临时表即可 - 若某张表没有数据,对应的
max_mytime会返回NULL,符合默认的聚合函数行为
内容的提问来源于stack exchange,提问作者Stan
相关产品推荐
相关产品推荐

