2012-07-31 22 views
6

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

我可以做到这一点每桌

SELECT TOP 3 * 
    FROM table_schema.table_name 

但是如果我是手工做到这一点,需要占用大量的时间。

您能否建议一种解决方法?

我试图this solution但我可以得到它的工作(我不知道如何修改它MSSQL)

编辑感谢您的答复。我可能还不够清楚:我的意思是我想解析每个单独的表格,只拿到前3条记录,而不是转到下一个。 雅罗斯拉夫的下面的代码是什么,我需要

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

前三记录按什么列?一台不具备*自然顺序*什么像那样 – Lamak 2012-07-31 13:35:38

回答

10

这里有:

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

谢谢,哥们!这正是我需要的!非常感激! Поздрави! – Phil 2012-07-31 13:38:09

+1

不客气,@Aushin解决方案既快速又干净,只是“但”是MSforeachtable和MSforeachdb是未公开的存储过程,因此Microsoft不支持它们并可随时更改它们 – Yaroslav 2012-07-31 13:42:41

+1

只是后续问题:是一次导出所有结果的最佳方式吗?似乎我只能导出“每桌”?谢谢 – Phil 2012-07-31 14:02:33

5
exec sp_MSforeachtable 'select top 3 * from ?' 
+0

谢谢,但只有当你想手动执行每个表时才有效。雅罗斯拉夫的下面的评论解决了我所需要的。谢谢你的帮助。 – Phil 2012-07-31 13:39:20

+2

你是什么意思手动? – Aushin 2012-07-31 13:40:54

+0

@Phil - 你是什么意思,“只有当你想手动执行每个表时才有效?”,这就是你所问的,对吗? – Lamak 2012-07-31 13:41:34