上面有许多不正确的代码段。我已经修复了上面的 SQLEagle 的代码片段,现在您确实应该看到最后修改日期 - 我相信修改日期应该来自 sys.objects,而不是 sys.tables。我看到 Andrew Arnold 评论 Debbie 的代码片段“完全一样”。然而,Andrew 显然没有运行这两个代码段,否则他会知道 Debbie 的结果在实际提供几乎正确的结果方面比 WaterCooler 的贡献更好,但可以按照以下进一步改进。
DECLARE @sqlString NVARCHAR(MAX) ,
@union NVARCHAR(MAX) ,
@name NVARCHAR(50),
@Counter AS Int
SET @sqlString = ''
SET @union = ''
SET @counter = 0
DECLARE crs CURSOR
FOR
SELECT Name
FROM sys.databases
WHERE state = 0
OPEN crs
FETCH NEXT FROM crs INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @counter = @counter + 1
SET @sqlString = @sqlString + @union
SET @sqlString = @sqlString + '
SELECT *
FROM (
SELECT TOP 1
''' + @name + ''' as DBName, modify_date
FROM [' + @name + '].sys.objects
ORDER BY modify_date DESC
) as Table' + CAST(@Counter AS VARCHAR(20))
SET @union = ' UNION '
FETCH NEXT FROM crs INTO @name
END
--PRINT @sqlString
SET @sqlString = @sqlString + ' ORDER BY DBName ASC'
CLOSE crs ;
DEALLOCATE crs ;
EXEC(@sqlString)