Sql server 如何使用游标连接列的字符串并同时更新另一个表中的字符串

Sql server 如何使用游标连接列的字符串并同时更新另一个表中的字符串,sql-server,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

我有一个要求,其中我有一个
#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
我们有没有办法删除这个游标实现,并使用基于集合的方法来获得更好的性能。请建议。

浓缩使用:


此解决方案是基于
设置的
。您应该避免循环/游标,因为逐行处理的效率非常低。

STUFF+XML,您根本不需要游标。非常感谢@LAD22025,您建议的解决方案已按预期工作。我想进一步学习XQuery(XML),请您向我推荐任何资源,以备不时之需。@PS078免费和SQL Server;)@PS078再次感谢您的建议和帮助:)
UPDATE i
SET ErrorMessage = STUFF( (SELECT '/' + v.ErrorMessage 
                             FROM ##ValidationList v
                             WHERE v.Id = i.Id
                             FOR XML PATH('')), 
                            1, 1, '')
FROM #ImportedStagingData i;