2015-09-02 38 views
-3

我有一個需求,我們需要根據數據的大小限制SQL查詢返回的記錄數。存儲過程中有多個select語句。有沒有辦法知道查詢可能返回的數據的總大小。我知道我們在管理工作室中包含了包含客戶端統計信息選項,但是我想知道我們是否可以在運行時獲取這些信息。獲取SQL查詢返回的數據大小

TIA, 阿米特

回答

0

這是一個有點廣泛,做我的理解下投票!

但是,我會建議使用「count」來計算返回的行數。您需要修改查詢/過程來添加此邏輯,使用計數執行查詢,檢查返回的行數,然後決定是否要繼續。

select count(*) from library_books where loaned_out='Y'; 

count(*) 
-------- 
    563 
0

最好的建議是計算每一行的平均大小。這也意味着要計算每個領域的平均規模。

然後你限制結果

RowAvgSize * Count(*) < YourSizeLimit 

OR

SELECT * 
FROM table 
LIMIT (YourSizeLimit/RowAvgSize) ::integer 
0

這是一個奇怪的規定......不知道的需要的基礎上,很難給出一個建議。似乎限制結果的最好方法是使用SELECT TOP返回固定數量的行或百分比。

如果你真的需要做一些計算,你可以輸出你的結果到一個臨時表,然後做一個計算來確定你想返回多少行。喜歡的東西:

select * 
into #temp 
from MyBigQueryHere 

declare @Rows as integer 
set @Rows = @@ROWCOUNT 

--insert calculation to modify value of @Rows here 
set @Rows = sqrt(@Rows) --example 

select top(@Rows) * 
from #temp 
+0

感謝您的。但是要求是不限制的行數,但數據的大小。數據將被導出到excel並被下游系統使用。問題是下游系統不會接受任何大小超過10 MB的文件。 –

+0

您可以通過將每條記錄的大小乘以行數來找出數據的大小。但即使如此......當插入到Excel電子表格中時,也不會告訴您這些數據的大小。您可以找出有多少行數據將放入大小小於10MB的電子表格中,然後將結果限制爲該行數的最大值。 –

+0

我們從查詢中返回多個記錄集,每個集合中返回的列是不同的。所以不可能知道行的大​​小。 –