如何跨数据库显示所有表的最后100行

时间:2015-12-17 12:17:29

标签: sql sql-server

假设我有一个包含不同数据的N个表(30-50)的数据库。所有表都有“CreatedDate”列

因此,我希望根据此日期从数据库中选择最后100条记录用于所有表以进行日志/审计。

一种方法是手动对所有表执行union all。或者使用存储过程以及sys.tables

但我认为有一种更好的方法可以查看在sql server中插入的所有记录的方便列表。

也许还有内置或第三方工具。

3 个答案:

答案 0 :(得分:1)

我猜这100个排名前100位可能只来自其中一张桌子,因此每张桌子都是TOP 100。 但是在下面,我相信你只需要编写函数“FunctionToGetAllColumnsForTableIntoOneBigOne()”,你应该可以使用我提供的其他链接......

max
祝你好运 - 我希望这有一些帮助。

答案 1 :(得分:0)

您可以使用动态SQL ...希望这有帮助

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += N'

SELECT TOP (100) * 
   FROM ' + QUOTENAME(SCHEMA_NAME([schema_id]))
  + '.' + QUOTENAME(name) 
  + ' 
   ORDER BY CreatedDate DESC'';'
FROM sys.tables AS t;

PRINT @sql;

EXEC sp_executesql @sql;

OR

包装动态SQL,这应该可以帮助你

SELECT 'Select Top 100 * From ' + SCHEMA_NAME(schema_id) + '.' + name +'
 ORDER BY CreatedOn DESC'
FROM sys.objects 
WHERE TYPE = 'U'

OR

EXEC sp_MSforeachtable 'select top(100) * from ?'

答案 2 :(得分:-1)

像这样...... 您必须在...中添加日期条件。

DECLARE @dt DateTime = GetDate()
DECLARE @sqlCommand NVARCHAR(100);
DECLARE curTbls CURSOR FOR SELECT 'SELECT TOP 100 * FROM ' + name 
                            FROM Sys.tables;
OPEN curTbls

FETCH NEXT FROM curTbls 
INTO @sqlCommand;

--SELECT @sqlCommand;
EXECUTE sp_executesql @sqlCommand

WHILE @@FETCH_STATUS = 0
BEGIN
  FETCH NEXT FROM curTbls 
  INTO @sqlCommand;

  --SELECT @sqlCommand;
  EXECUTE sp_executesql @sqlCommand
END;
CLOSE curTbls;
DEALLOCATE curTbls;