2010-08-09 31 views
5

我一直在使用sp_MSforeachtable內置存儲過程來確定數據庫中每個表的行數,使用COUNT(*)。什麼是最便宜的查詢我可以運行以查看錶中是否有任何行?

雖然我意識到我只想要一個0或1,這取決於表中是否有任何行。

還有別的我可以使用的,比COUNT(*)更快/更便宜嗎?

+0

看一看http://stackoverflow.com/questions/1597442/subquery-using-exists-1-or-exists所有的表名 – StuartLC 2010-08-09 16:28:41

+1

無論你想出什麼答案都應該基準。 COUNT(*)可能根據DBMS進行了很好的優化,另外它清楚地表達了您正在嘗試執行的目的。 – 2010-08-09 16:39:42

回答

8

考慮此查詢。當它找到第一個匹配時,EXISTS將停止執行。

IF EXISTS (SELECT 1 FROM MyTable) 
BEGIN 
    print 'at least one!' 
END 
ELSE 
BEGIN 
    print 'no rows found in table' 
END 
+0

@Downvoter:解釋爲什麼這不能解決問題和/或幫助OP? – 2010-08-09 16:27:38

0

也許只是搶第一行,並顯示1?

select top 1 1 from tablename

+4

不知道爲什麼這是TSQL的upvoted? – 2010-08-09 16:24:31

+0

@ p.campbell:您可以請求更正,而不是花費自己的代表進行downvoting。 :)更正看起來正確嗎? – 2010-08-09 17:00:37

+0

@ p.campbell;反正給了你一個贊成,希望能彌補它。 – 2010-08-09 17:07:28

0
SELECT TOP 1 ID FROM TABLE 

然後返回記錄集時,你可以做一個EOF檢查。

0

sp_spaceused可能會比COUNT(*)更有效率。

請記住,它不會實時更新,因此它在所有情況下可能都不是100%準確。

3

這將打印有至少1排

exec sp_MSforeachtable 'if exists (select 1 from ?) print ''?''' 
相關問題