xml插入表或更新表

USE [accountmanager]
GO
/****** Object:  StoredProcedure [dbo].[PersonInfoAddByXmlProc]    Script Date: 2019/5/9/周四 10:47:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO



-- =============================================
-- Author:		hsb
-- Create date: 20190509
-- Description:	新员工门店分配导入
-- =============================================
Alter PROCEDURE [dbo].[PersonExpoerToShopUPByXmlProc]
	@xmlStrHeGe xml, 
 	@xmlStrBuHeGe xml, 
 	@xmlStrjson xml, 
	@add_per int ,

	@out NVARCHAR(100) OUTPUT
AS
BEGIN 
	BEGIN transaction
	BEGIN TRY
	BEGIN
		DECLARE @handle INT;  
		DECLARE @PrepareXmlStatus INT;  
		DECLARE @count INT;   
		DECLARE @guid NVARCHAR(64)
		SET @guid=replace(NEWID(), '-', '')
		EXEC @PrepareXmlStatus= sp_xml_preparedocument @handle OUTPUT, @xmlStrHeGe;  
		IF ( 1=1)
		BEGIN

			UPDATE F SET F.per_dept=C.id,F.per_shop=D.SHOPID,F.per_busi=E.Roleid
			FROM  OPENXML(@handle, '/ArrayOfPersonImportModel/PersonImportModel', 2)  
			    WITH (
			    身份证 NVARCHAR(20),
			    姓名 NVARCHAR(20),
			    区域 NVARCHAR(200),
			    分店 NVARCHAR(200),
			    职位 NVARCHAR(200)
			    ) A
				INNER JOIN [dbo].[Base_Department_Tbl] C ON A.区域=C.deptName and ISNULL( c.del,0)=0
				LEFT JOIN [dbo].[Base_Shop_Tbl] D ON A.分店=D.Shopname and ISNULL( d.del,0)=0
				INNER JOIN [dbo].[Base_RoleList] E ON A.职位=E.RoleName and ISNULL( e.IsDel,0)=0
				LEFT Join [dbo].[Base_Person_Tbl] F ON A.身份证=F.per_idcard  AND F.DEL=0

				SET @out =[OperationDB].[dbo].[GetProcOutValFunc](1,'导入成功!')
				--导入日志
				INSERT INTO [dbo].[PersonImportLogTbl](jsonHege,jsonBuHege,json,addper)
				VALUES(@xmlStrHeGe,@xmlStrBuHeGe,@xmlStrjson,@add_per)

				--时间轴
				INSERT INTO [EmployeeTimeline](perId,newDept,newShop,newArea,opType,opTime,newPosition)
		        SELECT b.id,b.per_dept,b.per_shop,c.parentID,3,getdate(),b.per_busi 
		        from [Base_Person_Tbl] b 
		        left join [dbo].[Base_Department_Tbl] c on b.per_dept=c.id
		        where b.[route]=@guid

				--插入条数
				SET @count=(select COUNT(1) from [dbo].[Base_Person_Tbl] where [route]=@guid)
				update [dbo].[Base_Person_Tbl] set per_code=id where [route]=@guid
				SET @out =[OperationDB].[dbo].[GetProcOutValFunc](@count,'导入成功!')
		END
	END

	
		
		
	
	
	COMMIT TRANSACTION 
	END TRY
	BEGIN CATCH 
		SET @out =[OperationDB].[dbo].[GetProcOutValFunc](-1,'操作失败,服务器内部错误,请联系管理员![-2]!')
		ROLLBACK TRANSACTION
		INSERT INTO LogDB.DBO.SysProErrLogTbl values(ERROR_NUMBER(),ERROR_SEVERITY(),ERROR_STATE(),ERROR_PROCEDURE(), ERROR_LINE() ,ERROR_MESSAGE(),GETDATE())
	END CATCH
	
END

  

USE [accountmanager]
GO
/****** Object:  StoredProcedure [dbo].[PersonInfoAddByXmlProc]    Script Date: 2019/5/9/周四 10:47:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO



-- =============================================
-- Author:		hsb
-- Create date: 20181112
-- Description:	人事表导入
-- =============================================
ALTER PROCEDURE [dbo].[PersonInfoAddByXmlProc]
	@xmlStrHeGe xml, 
 	@xmlStrBuHeGe xml, 
 	@xmlStrjson xml, 
	@add_per int ,

	@out NVARCHAR(100) OUTPUT
AS
BEGIN 
	BEGIN transaction
	BEGIN TRY
	BEGIN
		DECLARE @handle INT;  
		DECLARE @PrepareXmlStatus INT;  
		DECLARE @count INT;   
		DECLARE @guid NVARCHAR(64)
		SET @guid=replace(NEWID(), '-', '')
		EXEC @PrepareXmlStatus= sp_xml_preparedocument @handle OUTPUT, @xmlStrHeGe;  
		IF ( 1=1)
		BEGIN
			INSERT INTO [Base_Person_Tbl](per_idcard,per_name,per_sex,per_age,per_birthday,per_tel,per_knowWay,per_know,per_exper,per_height,per_email,per_ancientFrom,per_nation,per_address,urgentConnectionPer,urgentPhone,per_dept,per_shop,per_busi,per_job,per_graduateTime,industryYears,per_marry,add_per,add_date,per_school,[route]) 
			SELECT A.身份证,A.姓名
			,CASE A.性别  WHEN '男' THEN 1 WHEN '女' THEN 0 else '2' END 性别
			,year(getdate())-CONVERT(int, substring(A.身份证,7,4)) 年龄
			,CONVERT(datetime, substring(A.身份证,7,8)) 出生日期
			,A.电话号码
			,CASE A.入职渠道  WHEN '网络招聘' THEN 1 WHEN '校园招聘' THEN 2 WHEN '上门招聘' THEN 3 WHEN '转介绍' THEN 4 WHEN '其他途径' THEN 5 else 0 END 入职渠道
			,CASE A.学历  WHEN '博士' THEN 1 WHEN '硕士' THEN 2 WHEN '本科' THEN 3 WHEN '大专' THEN 4 WHEN '中专' THEN 7 WHEN '高中' THEN 5 WHEN '初中及以下' THEN 6 else 0 END 学历
			,A.专业,A.身高,A.邮箱,A.籍贯,A.民族,A.居住地,A.紧急联系人,A.紧急联系人电话,C.id,ISNULL( D.shopID,0) shopID,E.RoleID
			,A.入职时间+' 00:00:00.000' 入职时间
			,A.毕业时间+' 00:00:00.000' 毕业时间
			,CONVERT(int, A.行业年限) 行业年限
			,CASE A.婚姻状况  WHEN '已婚' THEN 1 WHEN '未婚' THEN 0 else '2' END 婚姻状况
			,@add_per 添加人
			,GETDATE() 添加时间
			,A.毕业学校
			,@guid 来路
			FROM  OPENXML(@handle, '/ArrayOfPersonImportModel/PersonImportModel', 2)  
			    WITH (
			    身份证 NVARCHAR(20),
			    姓名 NVARCHAR(20),
			    性别 NVARCHAR(20),
			    电话号码 NVARCHAR(20),
			   -- 大区 NVARCHAR(20),
			    区域 NVARCHAR(200),
			    分店 NVARCHAR(200),
			    职位 NVARCHAR(200),
			    入职渠道 NVARCHAR(20),
			    学历 NVARCHAR(20),
			    专业 NVARCHAR(20),
			    身高 NVARCHAR(20),
			    邮箱 NVARCHAR(20),
			    籍贯 NVARCHAR(20),
			    民族 NVARCHAR(100),
			    居住地 NVARCHAR(600),
			    紧急联系人 NVARCHAR(20),
			    紧急联系人电话 NVARCHAR(20),
			    入职时间 NVARCHAR(20),
			    毕业时间 NVARCHAR(20),
			    行业年限 NVARCHAR(20),
			    婚姻状况 NVARCHAR(20),
			    毕业学校 NVARCHAR(200)
			    ) A
				--LEFT JOIN [dbo].[Base_Department_Tbl] B ON A.大区=B.deptName
				inner JOIN [dbo].[Base_Department_Tbl] C ON A.区域=C.deptName and ISNULL( c.del,0)=0
				left JOIN [dbo].[Base_Shop_Tbl] D ON A.分店=D.Shopname and ISNULL( d.del,0)=0
				inner JOIN [dbo].[Base_RoleList] E ON A.职位=E.RoleName and ISNULL( e.IsDel,0)=0
				where A.身份证 not in (select per_idcard from [dbo].[Base_Person_Tbl] where del!=2) 

				SET @out =[OperationDB].[dbo].[GetProcOutValFunc](1,'导入成功!')
				--导入日志
				INSERT INTO [dbo].[PersonImportLogTbl](jsonHege,jsonBuHege,json,addper)
				VALUES(@xmlStrHeGe,@xmlStrBuHeGe,@xmlStrjson,@add_per)

				--时间轴
				INSERT INTO [EmployeeTimeline](perId,newDept,newShop,newArea,opType,opTime,newPosition)
		        SELECT b.id,b.per_dept,b.per_shop,c.parentID,3,getdate(),b.per_busi 
		        from [Base_Person_Tbl] b 
		        left join [dbo].[Base_Department_Tbl] c on b.per_dept=c.id
		        where b.[route]=@guid

				--插入条数
				SET @count=(select COUNT(1) from [dbo].[Base_Person_Tbl] where [route]=@guid)
				update [dbo].[Base_Person_Tbl] set per_code=id where [route]=@guid
				SET @out =[OperationDB].[dbo].[GetProcOutValFunc](@count,'导入成功!')
		END
	END

	
		
		
	
	
	COMMIT TRANSACTION 
	END TRY
	BEGIN CATCH 
		SET @out =[OperationDB].[dbo].[GetProcOutValFunc](-1,'操作失败,服务器内部错误,请联系管理员![-2]!')
		ROLLBACK TRANSACTION
		INSERT INTO LogDB.DBO.SysProErrLogTbl values(ERROR_NUMBER(),ERROR_SEVERITY(),ERROR_STATE(),ERROR_PROCEDURE(), ERROR_LINE() ,ERROR_MESSAGE(),GETDATE())
	END CATCH
	
END

  

posted @ 2019-05-09 15:52  飞鱼上树了  阅读(498)  评论(0编辑  收藏  举报
/* 看板娘 */