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;