如何使用Cursor

时间:2015-09-10 06:04:07

标签: sql-server

我有一个要求,其中我有一个#ValidationList表,我们在其中记录了导入数据中发现的所有验证错误。

以下是#ValidationList表格中的数据快照:

Id  ErrorMsg
1   Asset  # Unknown 
1   Unique Name and code is needed
2   Unique Name and code is needed
2   Asset  # Unknown 
3   Asset  # Unknown 
3   Unique Name and code is needed
4   Unique Name and code is needed
4   Asset  # Unknown 

现在所有这些错误字符串都需要在与相同ID的分隔符连接后在原始登台表#ImportedStagingData中更新。

截至目前,我们正在使用游标更新原始表中的错误:

declare Errors Cursor for
        Select DISTINCT Id from ##ValidationList

    Open Errors

    Fetch Next from Errors into @Id      

    while @@Fetch_status = 0      
        begin

            set @ErrorMessage=null
            SELECT @ErrorMessage = COALESCE(@ErrorMessage, '') + ' / ' + ErrMsg
                        FROM (SELECT ErrorMessage as ErrMsg
                              FROM ##ValidationList
                              WHERE Id = @Id) [ErrMsg]

            update #ImportedStagingData 
            set ErrorMessage = @ErrorMessage
            where Id = @Id

            Fetch Next from Errors into @Id
        end

    close Errors
    deallocate Errors

我们是否有任何方法可以删除此游标实现并使用基于SET的方法来获得更好的性能。请建议。

0 个答案:

没有答案