--2. 创建Upate_Ref_Education_ICD_ByEduName存储过程,根据EduName和新的ICD串增量更新表
if Exists(select name from sysobjects where NAME = 'Upate_Ref_Education_ICD_ByEduName' and type='P')
drop procedure Upate_Ref_Education_ICD_ByEduName
GO
CREATE PROC Upate_Ref_Education_ICD_ByEduName @EduName VARCHAR(1000),@newICD VARCHAR(MAX)
AS
--功能: @newICD+@oldICD==>@mergeICD (并更新Ref_Education中对应的ICD), 但@oldICD中已有的数据不得再添加
DECLARE @oldICD VARCHAR(MAX),@mergeICD VARCHAR(MAX)
--旧数据, 新数据 (去除空格与换行等)
SELECT @oldICD=CONVERT(VARCHAR(max),ICD) FROM Ref_Education WHERE EduName =@EduName
SET @oldICD =REPLACE(REPLACE(REPLACE(REPLACE(@oldICD, CHAR(13), ''), CHAR(10), ''),CHAR(9),''),' ','')
SET @newICD =REPLACE(REPLACE(REPLACE(REPLACE(@newICD, CHAR(13), ''), CHAR(10), ''),CHAR(9),''),' ','')
--将表中的数据形成一串
Select @mergeICD=
stuff((select ','+id from (
SELECT id FROM fn_Split(@oldICD,',') UNION ALL
SELECT id FROM fn_Split(@newICD,',') WHERE id NOT IN( SELECT id FROM fn_Split(@oldICD,','))
) AS T for xml path('')),1,1,'')
PRINT '----------'+@EduName+'----------'
PRINT 'OLD ICD:'+@oldICD
PRINT 'NEW ICD:'+@newICD
PRINT 'MERGE ICD:'+@mergeICD + CHAR(13)
--更新数据
UPDATE Ref_Education SET ICD = @mergeICD WHERE EduName=@EduName
GO
新旧数据ICD的整合
最新推荐文章于 2025-06-19 22:19:07 发布