2011-08-05 49 views
3
進行計算,或者在數據綁定

哎,所以我有一個存儲過程填充一個gridviewASP.NET在存儲過程中的GridView

,在我的存儲過程我有兩列如

Total_Price DataType Money 

Discount DateType decimal(18, 0) 

和我想顯示稱爲Actual Price派生列是

Total_Price - Discount 

是最好在存儲過程中創建此列還是在gridview中加載計算?

繼承人,此刻我的存儲過程

SELECT  f.supplier_name,d.product_ID_key, d.product_name AS productName, d.packsize, d.tradePrice, d.IPU_code, d.EAN_code, c.discount, e.stock_indicator 
FROM   aw_customer AS a INNER JOIN 
         aw_cust_contract AS b ON a.cust_ID_key = b.cust_ID_key INNER JOIN 
         aw_contract_line AS c ON b.contract_ID_key = c.contract_ID_key INNER JOIN 
         aw_product AS d ON c.product_ID_key = d.product_ID_key INNER JOIN 
         aw_stock AS e ON d.product_ID_key = e.product_ID_key INNER JOIN 
         aw_supplier AS f ON d.supplier_ID_key = f.supplier_ID_key 
WHERE  (a.cust_ID_key = @customerId) 
ORDER BY d.product_name 

回答

2

我將在存儲過程的水平計算這一點,所以,爲了這個存儲過程的任何調用將返回相同的結果(你沒有做數學題在其他gridviews等將來如果他們調用相同的存儲過程)

在這種情況下,我經常創建一個SQL View,以便計算在視圖內完成,然後多個存儲過程可以調用此查看並顯示如下數據:

SELECT Total_Price 
     ,Discount 
     ,Actual_Price 
FROM [v_TableA] 

http://msdn.microsoft.com/en-us/library/aa214068%28v=sql.80%29.aspx

請參閱這篇文章索引視圖的細節,這也將提高性能:

http://technet.microsoft.com/en-us/library/cc917715.aspx

+0

嘿看原來的帖子我的存儲過程,我最好的放在視圖會提高速度等? – StevieB

+0

就像@sll所說的那樣,執行計算數據庫級別將提高在GridView綁定內運行計算的性能。不過,我認爲將查詢存儲在視圖中並沒有太大的區別,因爲查詢仍然以任何方式運行。我認爲我喜歡將它存儲在視圖中的原因是它的一致性數據輸出,在整個系統中不會有重複計算的負載。例如,如果'Actual_Price'將來會受到另一列的影響,則必須通過所有存儲過程並更改計算。 – Curt

+0

另一種選擇是創建用戶定義函數。但基本上,爲了回答你最初的問題,運行計算數據庫級別比在應用程序級別綁定GridView要好。 – Curt

0

任何方式對數據的基礎水平(SP)這樣做會顯著提高數據計算的性能,但另一方面,增加新的列會增加數據量導致的網絡負載。

因此,請確定自己對於您的應用程序更重要。