2012-07-31 79 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