if object_ID('dbo.[Cinical_VEH41_Update]') is not null DROP PROCEDURE [dbo].[Cinical_VEH41_Update] Go CREATE PROC [dbo].[Cinical_VEH41_Update] @lXml NTEXT --医嘱内容 , @ACF01 TINYINT --1门诊 2住院 , @VEH41 INT --0=因伤 1=因病 , @BCE01 INT --操作员ID , @BCE03 nVARCHAR(64) --操作员 AS BEGIN IF OBJECT_ID('tempdb..#tmpVAF') IS NOT NULL DROP TABLE #tmpVAF 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 IDENTITY(INT, 1, 1) AS ID, * INTO #tmpVAF FROM OPENXML(@iDOM, '/Root/VAF1/Ie', 8) WITH (lCheck INT -- , CBM01 INT -- , VAF01 INT -- , BDA01 VARCHAR(10) -- , VAF22 VARCHAR(1024) -- , vaf10 INT -- , VEH41 VARCHAR(64) -- , VAA01 INT -- ) WHERE lCheck = 1 EXEC sp_xml_removedocument @iDOM IF NOT EXISTS (SELECT * FROM #tmpVAF) BEGIN RAISERROR('提交文档错误,医嘱信息为空', 16, 1) WITH NOWAIT RETURN 1 END IF @ACF01 = 2 AND EXISTS (SELECT 1 FROM #tmpVAF WITH (NOLOCK) WHERE vaf10 >= 8) BEGIN RAISERROR('医嘱已发送停止,不能再调整.', 16, 1) WITH NOWAIT RETURN 2 END --如果医保已上传不允许作废医嘱 DECLARE @lSmsg VARCHAR(500) = '' IF @ACF01 = 1 SET @lSmsg = (SELECT TOP 1 a.VAF22 FROM #tmpVAF a JOIN VAJ1 c WITH (NOLOCK) ON c.VAF01 = a.VAF01 JOIN IAQ1 d WITH (NOLOCK) ON c.VAJ01 = d.VAJ01 WHERE d.IAQ02 = 2) IF @ACF01 = 2 SET @lSmsg = (SELECT TOP 1 a.VAF22 FROM #tmpVAF a JOIN VAJ2 c WITH (NOLOCK) ON c.VAF01 = a.VAF01 JOIN IAQ1 d WITH (NOLOCK) ON c.VAJ01 = d.VAJ01 WHERE d.IAQ02 = 2) IF @lSmsg > '' BEGIN SET @lSmsg = @lSmsg + ' 对应医保费用已上传,不能再调整,请刷新后在操作!' RAISERROR(@lSmsg, 16, 1) WITH NOWAIT RETURN 1 END DECLARE @aMin INT, @aMax INT, @lID INT SELECT @aMin = MIN(ID), @aMax = MAX(ID)FROM #tmpVAF SET @lID = 0 EXEC Core_NewIDEx 'VBG1', 'VBG01', @lID OUT, @aMax SET @lID = @lID - @aMax END BEGIN TRAN INSERT INTO VBG1 (VBG01, VAF01, VBG03, BCE03, VBG05, VBG06) SELECT ID + @lID, VAF01, vaf10, @BCE03, GETDATE(), '调整信息前:' + ISNULL(VEH41, '') FROM #tmpVAF WHERE lCheck = 1 IF @ACF01 = 1 BEGIN UPDATE a SET a.VEH41 = @VEH41 FROM VEH1 a JOIN #tmpVAF b ON a.VAF01 = b.VAF01 WHERE lCheck = 1 UPDATE a SET a.VEG16 = @VEH41 FROM VEG1 a JOIN VAJ1 c WITH (NOLOCK) ON a.VAJ01 = c.VAJ01 JOIN #tmpVAF b ON c.VAF01 = b.VAF01 WHERE lCheck = 1 END IF @ACF01 = 2 BEGIN UPDATE a SET a.VEH41 = @VEH41 FROM VEH2 a JOIN #tmpVAF b ON a.VAF01 = b.VAF01 WHERE lCheck = 1 UPDATE a SET a.VEG16 = @VEH41 FROM VEG2 a JOIN VAJ2 c WITH (NOLOCK) ON a.VAJ01 = c.VAJ01 JOIN #tmpVAF b ON c.VAF01 = b.VAF01 WHERE lCheck = 1 END IF @@ERROR > 0 --如果发生错误,回滚数据 BEGIN IF @@TRANCOUNT > 0 ROLLBACK TRAN RAISERROR('保存病人医嘱信息变动记录时发生错误,错误号为: %d.', 16, 1, @@ERROR) WITH NOWAIT RETURN 3 END COMMIT TRAN IF OBJECT_ID('tempdb..#tmpVAF') IS NOT NULL DROP TABLE #tmpVAF GO