如何缩短SQL脚本

时间:2017-11-26 04:58:17

标签: sql sql-server cursor

根据我下面的代码,我使用cursor获取WInstance表中的所有信息。但是,由于cursor,我的查询可能会出现效果问题。有没有办法使用嵌套选择而不是cursor?请与我分享你的想法。

我的业务是仅获得相同的ItemIDSequenceIDTaskStatusListIDWebIDSiteID中的一个。

从技术上讲,加入表中有很多相同的ItemIDSequenceIDTaskStatusListIDWebIDSiteID具有WInstance的{​​{1}}和WProgress。因此,我使用AssignTask = 'Assign task'distinct进行循环,仅使用cursor获得前1名。

这是我的代码:

order by

1 个答案:

答案 0 :(得分:0)

您不需要使用光标。将其替换为以下查询

SELECT  ItemID, SequenceID, TaskStatus, ListID, WebID, SiteID
FROM
(
    SELECT  RN = ROW_NUMBER() OVER (PARTITION BY WP.CurrentActivityTitle,
                                                 WI.ItemID, WP.SequenceID, 
                                                 WI.ListID, WI.WebID, WI.SiteID 
                                    ORDER BY TimeStamp DESC),
            WI.ItemID ,
            WP.SequenceID ,
            CASE WHEN WP.ActivityComplete = 0
                 THEN 'Not Started'
                 ELSE 'Completed'
                 END AS 'TaskStatus' ,
            WI.ListID ,
            WI.WebID ,
            WI.SiteID
    FROM    dbo.WInstance WI
            INNER JOIN dbo.WProgress WP ON WI.InstanceID = WP.InstanceID
    WHERE   WP.CurrentActivityTitle = @AssignTask
) D
WHERE RN = 1;