SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO --Alter 01682 2020.01.13 增加VBN1的扩展字段保存 --Alter 01682 2020.03.23 增加从医嘱单中提取入院诊断 ALTER proc [dbo].[Clinic_InHosInfor_Save] @lXml ntext ,@lBCE01 int ,@lBCE03 varchar(20) ,@lVAC01 int ,@lVAA01 int ,@lBCK01 int AS DECLARE @lDate Datetime SET @lDate = GetDate() DECLARE @iDOM int, @iret int Exec @iret = sp_xml_preparedocument @iDOM OUTPUT, @lXml if @iret > 0 BEGIN exec sp_xml_removedocument @iDOM RAISERROR('解析XML文档时发生错误,错误号: %d.', 16, 1, @iret) with nowait return @iret END select @lBCE03 = BCE03 from BCE1 where BCE01 = @lBCE01 SELECT * into #tmpVACm from OpenXml(@iDOM,'/Root/VAC1/Ie',8) WITH (VAC01 int ,VAA01 int ,VAC21 varchar(32) ,VAA34 varchar(20) ,BCK01 int ,VBN09 numeric(18,2) ,VBN10 datetime ,VBN11 datetime ,VBN14 varchar(255) ,VBN20 varchar(20) ,VBN21 tinyint ,ATTRSVBN1 varchar(8000)) If not exists(select * from #tmpVACm) BEGIN exec sp_xml_removedocument @iDOM IF Object_id('tempdb..#tmpVACm') IS NOT NULL DROP TABLE #tmpVACm RAISERROR('提交文档错误,病人首页信息为空', 16, 1) with nowait RETURN 2 END SELECT identity(int,1,1) as ID,* into #tmpVAOm from OpenXml(@iDOM,'/Root/VAO1/Ie',8) WITH (VAC01 int ,VAA01 int ,IAA01 int ,VAO01 int ,VAO07 int ,VAF01 int ,VAO11 tinyint ,CAM01 int ,VAO15 varchar(150) ,BAK01A int ,VAO18 tinyint ,VAO22 tinyint ,FSign tinyint,BGP01 varchar(2),ADY01 varchar(2),BAK02 varchar(32),IAD03 varchar(32),IAD04 varchar(128),IAD01 int ,VAO35 varchar(128) ,IsSelect tinyint ) DECLARE @strEmpName VARCHAR(20),@HostIp varchar(20) ,@HostName varchar(64) SELECT @strEmpName = EmpName,@HostIp = HostIp,@HostName = HostName FROM OpenXml(@iDOM, '/Root/OperInfo', 8) WITH ( EmpName VARCHAR(64) --最后修改人 ,EmpId int , HostIp varchar(256) , HostName varchar(256) ) exec sp_xml_removedocument @iDOM --判断入院通知单入院诊断 if exists(select * from #tmpVACm where BCK01 > 0 ) and not exists(select * from #tmpVAOm where VAO11 = 1 and VAO22 = 0 and VAF01 = 0 and VAO15<>'') and not exists(select * from #tmpVAOm where isselect = 1) begin RAISERROR('入院通知单门诊诊断不能省略.', 16, 1) with nowait IF Object_id('tempdb..#tmpVACm') IS NOT NULL DROP TABLE #tmpVACm RETURN 2 end if exists(select * from #tmpVAOm where isselect = 1 and VAO22 = 1 and VAF01 > 0) begin insert into #tmpVAOm(VAC01,VAA01,IAA01,VAO07,VAF01,VAO11,CAM01,VAO15,BAK01A,VAO18,VAO22,FSign,BGP01,ADY01,BAK02,IAD03,IAD04,IAD01,VAO35) select a.VAC01,a.VAA01,a.IAA01,a.VAO07,0,1,a.CAM01,a.VAO15,a.BAK01A,a.VAO18,0,0,a.BGP01,a.ADY01,a.BAK02,a.IAD03,a.IAD04,a.IAD01,a.VAO35 from #tmpVAOm a where a.isselect = 1 and VAO22 = 1 and VAF01 > 0 end Declare @lVBN01 int, @lZAE01 int,@VAA10 int,@AAU01 varchar(1),@AgeN varchar(20),@para58 varchar(10),@vbn19 int DECLARE @val01 int Declare @tmpVAOnew Table(UID int IDENTITY(1,1), ID int) --开始保存 Begin TRAN --入院记录 -- and not exists(select * from VBN1 where VAA07 = @lVAC01 and VBN12 >= 1) ) if exists(select * from #tmpVACm where BCK01 > 0 ) begin set @vbn19 = ISNULL((select MAX(VBN19) fvbn19 from VBN1 where VAA07 = @lVAC01 and VBN12 >= 0),0)+1 if exists(select * from VBN1 where VAA07 = @lVAC01 and VBN12 <= 0) begin update a set a.BCE01 = @lBCE01,a.BCE03 = @lBCE03,a.BCK01 = b.BCK01,a.VBN07 = b.VAC21,a.VBN08 = b.VAA34 ,a.VBN09 = b.VBN09,a.VBN10 = b.VBN10,a.VBN11 = b.VBN11,a.VBN14 = b.VBN14,a.BCK01B = @lBCK01,a.VBN12=0 ,a.VBN20 = b.VBN20,a.VBN21 = b.VBN21,a.ATTRS=b.ATTRSVBN1 from VBN1 a join #tmpVACm b on a.VAA07 = b.VAC01 where a.VBN12 <= 0 end else begin exec Core_NewId_VBN01 @lVBN01 out insert into VBN1(VAA07,BCE01,BCE03,VBN04,BCK01,VBN07,VBN08,VBN09,VBN10,VBN11,VBN12,VBN14,PRNCP,BCK01B,VAA01,VBN19,VBN20,VBN21,ATTRS) select VAC01,@lBCE01,@lBCE03,@lDate,BCK01,VAC21,VAA34,VBN09,VBN10,VBN11,0,VBN14,0,@lBCK01,VAA01,@vbn19,VBN20,VBN21,ATTRSVBN1 from #tmpVACm end end --修改诊断记录 if exists(select * from #tmpVAOm where FSign <> 1) BEGIN Delete a from VAO1 a join #tmpVAOm b on a.VAO01 = b.VAO01 where b.FSign = 3 and a.VAO01 > 0 update a set a.CAM01 = b.CAM01,a.BAK01A = b.BAK01A,a.VAO15 = b.VAO15,a.BGP01 = b.BGP01,a.ADY01 = b.ADY01,a.VAO07 = b.VAO07,a.BAK02A=b.BAK02,a.IAA01=b.IAA01,a.VAO35 = b.VAO35,a.VAO18 = b.VAO18 from VAO1 a join #tmpVAOm b on a.VAO01 = b.VAO01 where b.FSign = 2 --if exists(select * from #tmpVAOm where FSign = 0 and VAO11 = 1 and isnull(VAF01,0) = 0 and VAO22 = 0) -- delete from VAO1 where ACF01 = 1 and VAF01 = 0 and VAA07 = @lVAC01 and VAO11 = 1 and VAO22 = 0 insert into @tmpVAOnew(ID) select ID from #tmpVAOm where FSign = 0 if exists(select * from @tmpVAOnew) begin declare @aMax int, @aVAO01 int select @aMax = Max(UID) from @tmpVAOnew Exec Core_NewIDEX 'VAO1','VAO01',@aVAO01 out, @aMax set @aVAO01 = @aVAO01 - @aMax INSERT INTO VAO1(VAO01,VAA01,VAA07,VAF01,ACF01,VAO06,VAO07,VAO10,VAO11 ,BAK01A,CAM01,BCE03A,VAO15,VAO18,VAO22,VAO19,BGP01,ADY01,BAK02A,IAA01,IAD01,IAD03,IAD04,VAO35) select @aVAO01 + b.UID,a.VAA01,a.VAC01,a.VAF01,1,b.UID,a.VAO07,0,a.VAO11 ,a.BAK01A,a.CAM01,@lBCE03,a.VAO15,a.VAO18,a.VAO22,@lDate,a.BGP01,a.ADY01 ,a.BAK02,a.IAA01,a.IAD01,a.IAD03,a.IAD04,a.VAO35 from #tmpVAOm a join @tmpVAOnew b on a.ID = b.ID end END --插入修改记录 insert into ZIU1(ZIU02,ZIU03,BCE01,BCE03,ZIU06,ZIU07,ZIU08,ZIU09,ZIU10) select @HostIp,@HostName,@lBCE01,@lBCE03,GETDATE(),'入院通知单编辑',@lVAC01,0,@lXml commit tran IF Object_id('tempdb..#tmpVACm') IS NOT NULL DROP TABLE #tmpVACm IF Object_id('tempdb..#tmpVAOm') IS NOT NULL DROP TABLE #tmpVAOm