2010-05-25 32 views
1

我有,我創建的SQL Server 2008的大動態的SQL查詢此查詢基於各種搜索條件,用戶可能會給諸如姓搜索,名字的應用程序,SSN等如何預測結果集行數?

的要求是如果用戶給出了一個條件,那麼形成的查詢可能會返回很多行(可配置爲最多N行),那麼應用程序必須發回一條消息給用戶,說他需要將他的搜索查詢細化爲現有的查詢將返回太多的行。

我不想讓客戶說5000行,然後丟棄該數據只是爲了向用戶顯示錯誤。什麼是解決這個問題的有效方法?

回答

4

爲什麼不只顯示前N行,並且消息?限制返回到N + 1的行,並且如果返回的行的計數大於N,則顯示消息:)

如果您只想檢查查詢將返回多少行然後select count(id)(或某列名稱)而不是select *

+1

我們也限制這種方式。 – gbn 2010-05-25 18:21:21

+0

如果查詢返回太多行,則不要求用戶顯示任何結果。 而做一個計數的問題是,查詢可以成爲巨大的多個INTERSECTS,UNION等....它從.NET發送到數據庫。所以做一個計數意味着我需要用count發送一次完整的查詢,並且如果它在限制範圍內,那麼將查詢重新發送到SQL。意味着雙倍的帶寬需求。 有沒有其他想法? – 2010-05-26 02:23:51

+0

沒有其他想法。要麼返回實際數據並使用它,要麼先返回計數,然後再次查詢數據。你可以在存儲過程中做到這一點,但如果計數小於N,它仍然必須執行2個查詢。但是,如果你限制到N + 1,那麼至少你只能返回那麼多的數據,並且仍然是能夠滿足您的要求。如果可能,我肯定會推薦顯示N行和一條消息。 – oedo 2010-05-26 08:39:26