我有一個需求,我們需要根據數據的大小限制SQL查詢返回的記錄數。存儲過程中有多個select語句。有沒有辦法知道查詢可能返回的數據的總大小。我知道我們在管理工作室中包含了包含客戶端統計信息選項,但是我想知道我們是否可以在運行時獲取這些信息。獲取SQL查詢返回的數據大小
TIA, 阿米特
我有一個需求,我們需要根據數據的大小限制SQL查詢返回的記錄數。存儲過程中有多個select語句。有沒有辦法知道查詢可能返回的數據的總大小。我知道我們在管理工作室中包含了包含客戶端統計信息選項,但是我想知道我們是否可以在運行時獲取這些信息。獲取SQL查詢返回的數據大小
TIA, 阿米特
這是一個有點廣泛,做我的理解下投票!
但是,我會建議使用「count」來計算返回的行數。您需要修改查詢/過程來添加此邏輯,使用計數執行查詢,檢查返回的行數,然後決定是否要繼續。
select count(*) from library_books where loaned_out='Y';
count(*)
--------
563
最好的建議是計算每一行的平均大小。這也意味着要計算每個領域的平均規模。
然後你限制結果
RowAvgSize * Count(*) < YourSizeLimit
OR
SELECT *
FROM table
LIMIT (YourSizeLimit/RowAvgSize) ::integer
這是一個奇怪的規定......不知道的需要的基礎上,很難給出一個建議。似乎限制結果的最好方法是使用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
感謝您的。但是要求是不限制的行數,但數據的大小。數據將被導出到excel並被下游系統使用。問題是下游系統不會接受任何大小超過10 MB的文件。 –
您可以通過將每條記錄的大小乘以行數來找出數據的大小。但即使如此......當插入到Excel電子表格中時,也不會告訴您這些數據的大小。您可以找出有多少行數據將放入大小小於10MB的電子表格中,然後將結果限制爲該行數的最大值。 –
我們從查詢中返回多個記錄集,每個集合中返回的列是不同的。所以不可能知道行的大小。 –