下面的存储过程是前段时间写的,现在需要修改。
联系不上原开发者,就去看看。对我来说,这个过程似乎过于复杂。难道不能通过简单的 UPDATE 来完成吗?任何人都可以证明在这里使用 CURSOR 是合理的吗?
ALTER PROCEDURE [settle_Stage1]
@settleBatch int
AS
DECLARE @refDate datetime;
DECLARE @dd int;
DECLARE @uid int;
DECLARE trans_cursor CURSOR FOR
SELECT uid, refDate FROM tblTransactions WHERE (settle IS NULL ) AND (state IN ( 21, 31, 98, 99 ))
OPEN trans_cursor
FETCH FROM trans_cursor INTO @uid, @refDate
WHILE @@FETCH_STATUS = 0
BEGIN
SET @dd = DATEDIFF( day, @refDate, getDate())
IF ( @dd >= '1' )
BEGIN
UPDATE tblTransactions
SET settle = @settleBatch WHERE uid = @uid
END
FETCH FROM trans_cursor INTO @uid, @refDate
END
CLOSE trans_cursor
DEALLOCATE trans_cursor
最佳答案
你是对的 - 这看起来像“过程 SQL”,来自可能不了解 SQL 和设置操作的人。
并将其转换为基于集合的查询应该有助于提高性能。
不需要游标,并且确实使存储过程过于复杂。
关于sql - 游标和存储过程优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8312673/