2016-11-29 53 views
0

阅读大量关于游标的恶意的文章,但对我来说,如果光标只读和只转发,它似乎是一个好方法。我是否认为这不会造成锁定。循环/遍历一组记录并执行一个存储过程

我需要选择一组记录并遍历它们,如果该行具有特定值,则执行一个操作。该acrion将是一个存储过程,并会将当前行的副本插入到具有某些更新日期的同一个表中)。可能有很多这些行,所以我正在寻找最有效的方式。

任何人都可以提出最有效的方法来解决这类问题吗?

+2

你可以用一些示例数据来解释吗 – TheGameiswar

+0

游标并不总是性能杀手,但它很难调试。尝试尽可能将循环转换为基于集合的逻辑,利用登台表执行更新工作。 – Eric

+0

*“我想采取一些行,更新一些日期,然后重新插入到同一个表”*可以肯定地使用基于集合的逻辑来实现。这里几乎肯定不需要光标。 – iamdave

回答

0

你可以开始寻找到

用于例如

WITH 
    cteTotalSales (SalesPersonID, NetSales) 
    AS 
    (
    SELECT SalesPersonID, ROUND(SUM(SubTotal), 2) 
    FROM Sales.SalesOrderHeader 
    WHERE SalesPersonID IS NOT NULL 
    GROUP BY SalesPersonID 
) 
SELECT 
    sp.FirstName + ' ' + sp.LastName AS FullName, 
    sp.City + ', ' + StateProvinceName AS Location, 
    ts.NetSales 
FROM Sales.vSalesPerson AS sp 
    INNER JOIN cteTotalSales AS ts 
    ON sp.BusinessEntityID = ts.SalesPersonID 
ORDER BY ts.NetSales DESC 

希望它有帮助!