【问题标题】:Select the first 3 rows of each table in a database选择数据库中每个表的前 3 行
【发布时间】:2012-07-29 06:49:49
【问题描述】:

我有一个包含 69 个表的数据库,我只想选择每个表的前三个记录。

我可以做到这一点每张桌子

SELECT TOP 3 * 
  FROM table_schema.table_name

但是,如果我要手动执行此操作,则会花费大量时间。

您能建议一个解决方法吗?

我尝试了this solution,但我可以让它工作(我不知道如何为 MSSQL 修改它)

编辑感谢您的回复。我可能不够清楚:我的意思是我想解析每个单独的表并且只获取前 3 条记录而不是移动到下一条记录。 下面是雅罗斯拉夫的代码是我需要的

DECLARE @sql VARCHAR(MAX)='';
SELECT @sql=@sql+'SELECT TOP 3 * FROM '+'['+SCHEMA_NAME(schema_id)+'].['+name+']'+';'
  FROM sys.tables
EXEC(@sql)

【问题讨论】:

  • 前三个记录根据什么列?,表没有自然顺序或类似的东西

标签: sql sql-server-2008 select


【解决方案1】:
 exec sp_MSforeachtable 'select top 3 * from ?'

【讨论】:

  • 谢谢,但只有当您想手动为每个表执行此操作时才有效。雅罗斯拉夫在下面的评论解决了我的需要。感谢您的帮助。
  • @Phil - “仅当您想手动为每个表执行此操作时才有效”是什么意思?这就是您要问的,对吧?
  • 另外,一定要点击雅罗斯拉夫答案旁边的复选标记:)
  • 刚刚做了。您的解决方案也有效。谢谢你们俩。祝你有美好的一天:)
【解决方案2】:

这里有:

DECLARE @sql VARCHAR(MAX)='';
SELECT @sql=@sql+'SELECT TOP 3 * FROM '+'['+SCHEMA_NAME(schema_id)+'].['+name+']'+';'
  FROM sys.tables
EXEC(@sql)

【讨论】:

  • 谢谢,伙计!这正是我所需要的!非常感激! Поздрави!
  • 不客气,@Aushin 解决方案也快速而干净,只是“但是”是 MSforeachtable 和 MSforeachdb 是未记录的存储过程,因此 Microsoft 不支持它们并且可以随时更改它们跨度>
  • 只是一个后续问题:一次导出所有结果的最佳方式是什么?好像我只能导出“每张桌子”?谢谢
  • 创建一个新问题将有助于获得最佳结果......但现在我想到的是在某处使用 PRINT......只是猜测
  • 有没有办法按 abc 顺序排列表格(就像单击数据库时出现的那样 --> 表格?)
猜你喜欢
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 2016-12-08
  • 2020-07-12
相关资源
最近更新 更多