我一直在使用sp_MSforeachtable
內置存儲過程來確定數據庫中每個表的行數,使用COUNT(*)。什麼是最便宜的查詢我可以運行以查看錶中是否有任何行?
雖然我意識到我只想要一個0或1,這取決於表中是否有任何行。
還有別的我可以使用的,比COUNT(*)更快/更便宜嗎?
我一直在使用sp_MSforeachtable
內置存儲過程來確定數據庫中每個表的行數,使用COUNT(*)。什麼是最便宜的查詢我可以運行以查看錶中是否有任何行?
雖然我意識到我只想要一個0或1,這取決於表中是否有任何行。
還有別的我可以使用的,比COUNT(*)更快/更便宜嗎?
考慮此查詢。當它找到第一個匹配時,EXISTS
將停止執行。
IF EXISTS (SELECT 1 FROM MyTable)
BEGIN
print 'at least one!'
END
ELSE
BEGIN
print 'no rows found in table'
END
@Downvoter:解釋爲什麼這不能解決問題和/或幫助OP? – 2010-08-09 16:27:38
也許只是搶第一行,並顯示1?
select top 1 1 from tablename
不知道爲什麼這是TSQL的upvoted? – 2010-08-09 16:24:31
@ p.campbell:您可以請求更正,而不是花費自己的代表進行downvoting。 :)更正看起來正確嗎? – 2010-08-09 17:00:37
@ p.campbell;反正給了你一個贊成,希望能彌補它。 – 2010-08-09 17:07:28
SELECT TOP 1 ID FROM TABLE
然後返回記錄集時,你可以做一個EOF檢查。
sp_spaceused
可能會比COUNT(*)
更有效率。
請記住,它不會實時更新,因此它在所有情況下可能都不是100%準確。
這將打印有至少1排
exec sp_MSforeachtable 'if exists (select 1 from ?) print ''?'''
看一看http://stackoverflow.com/questions/1597442/subquery-using-exists-1-or-exists所有的表名 – StuartLC 2010-08-09 16:28:41
無論你想出什麼答案都應該基準。 COUNT(*)可能根據DBMS進行了很好的優化,另外它清楚地表達了您正在嘗試執行的目的。 – 2010-08-09 16:39:42