假设我有一个包含不同数据的N个表(30-50)的数据库。所有表都有“CreatedDate”列
因此,我希望根据此日期从数据库中选择最后100条记录用于所有表以进行日志/审计。
一种方法是手动对所有表执行union all
。或者使用存储过程以及sys.tables
但我认为有一种更好的方法可以查看在sql server中插入的所有记录的方便列表。
也许还有内置或第三方工具。
答案 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;