ASP.NET在存储过程中执行计算,或在Gridview中的Databind中执行计算

时间:2011-08-05 10:10:47

标签: asp.net sql stored-procedures gridview

嘿所以我有一个填充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 个答案:

答案 0 :(得分:2)

我会在存储过程级别计算这一点,因此对此存储过程的任何调用都将返回相同的结果(如果他们调用相同的存储过程,您将来不必对其他网格视图等进行数学运算)

在这种情况下,我经常创建一个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

答案 1 :(得分:0)

任何在数据库级别(在SP中)执行此操作的方式都将显着提高数据计算的性能,但另一方面,添加新列会因数据量增加而增加网络负载。

因此,请确定对您的应用程序更重要的是什么。