如何获取SQL PROD schema下各含timestamp字段表的最新最大时间戳
解决方案
你当前脚本仅生成了查询最大时间戳的SQL文本,并未实际执行这些语句获取返回值,因此无法得到真实的时间戳结果。可通过动态SQL批量执行生成的查询语句,直接得到期望输出。
修改后完整脚本(适用SQL Server 2017及以上版本)
WITH CTE AS ( SELECT CONCAT(schema_name(t.schema_id), '.',t.name) AS table_name, c.name AS time_stamp FROM sys.tables t INNER JOIN sys.columns c ON c.object_id = t.object_id WHERE schema_name(t.schema_id) = 'PROD' AND c.name = 'timestamp' ) SELECT CONCAT('SELECT ''', table_name, ''' AS tName, MAX(', time_stamp, ') AS tStamp FROM ', table_name) AS sql_part INTO #TEMP_TABLE FROM CTE DECLARE @sql NVARCHAR(MAX) -- 将所有单表查询语句用UNION ALL拼接为一条完整SQL SELECT @sql = STRING_AGG(sql_part, ' UNION ALL ') FROM #TEMP_TABLE DROP TABLE #TEMP_TABLE -- 执行动态SQL直接返回最终结果 EXEC sp_executesql @sql
低版本SQL Server兼容方案
如果你的SQL Server版本低于2017,不支持STRING_AGG函数,可将拼接@sql的部分替换为以下写法:
SELECT @sql = STUFF(( SELECT ' UNION ALL ' + sql_part FROM #TEMP_TABLE FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 10, '')
内容的提问来源于stack exchange,提问作者Stan
相关产品推荐
相关产品推荐

