【问题标题】:ASP.NET Perform Calculation in Stored Procedure, or in Databind in GridviewASP.NET 在存储过程中或在 Gridview 中的 Databind 中执行计算
【发布时间】:2011-08-05 10:10:47
【问题描述】:

嘿,所以我有一个存储过程来填充网格视图

在我的存储过程中,我有两列,例如

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

【问题讨论】:

    标签: asp.net sql stored-procedures gridview


    【解决方案1】:

    我将在存储过程级别进行计算,以便对该存储过程的任何调用都将返回相同的结果(如果它们调用相同的存储过程,您以后不必对其他网格视图等进行数学计算) )

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

    【讨论】:

    • 嘿,看看我在原始帖子中的存储过程,我最好把它放在一个可以提高速度等的视图中吗?
    • 就像@sll 所说的,执行计算数据库级别将比在 GridView 的绑定中运行计算提高性能。但是,我认为将查询存储在视图中不会有太大的不同,因为查询仍然以任何一种方式运行。我认为我喜欢将它存储在视图中的是其一致的数据输出,您不会在整个系统中进行大量重复计算。例如,如果Actual_Price 将来受到另一列的影响,您将不得不遍历所有存储过程并更改计算。
    • 另外一种选择是创建一个用户定义的函数。但基本上,要回答您最初的问题,运行计算数据库级别会比在应用程序级别绑定 GridView 更好。
    【解决方案2】:

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

    所以你自己决定什么对你的应用程序更重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-04
      相关资源
      最近更新 更多