excel批量导入后 数据库校验存储过程

USE [rscs]
GO
/****** Object:  StoredProcedure [dbo].[pro_SqlBulkCopyData_JiaQi]    Script Date: 2017-03-25 17:50:33 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:        <Author,,Name>
-- Create date: <Create Date,,>
-- Description:    <Description,,批量导入,临时表去重逻辑>
-- =============================================
ALTER PROCEDURE [dbo].[pro_SqlBulkCopyData_JiaQi]
    
AS
BEGIN
--select * from [dbo].[Base_JiaQi1] where workersnum='090531' and attendancedatatime='20170114'
--insert into [dbo].[Base_JiaQi1] (workersnum,attendancedatatime) values('090531','20180000')

/************ a b c三表 批量导入检验去重功能
 总计0条,成功导入0条,失败0条
 失败明细:
 Excel 重复数据:0条
 不存在的工资号:0条
 已经存在的数据:0条
Attendanname,Workersnum,Attendancedatatime,AttendanceReasonmore,Attendancecampus,IFVacation
****************/
DECLARE @tb1 Table--表变量存储最终返回的结果集
  (
     id int,--排序
   Attendanname nvarchar(20),
     Workersnum nvarchar(20),
     Attendancedatatime nvarchar(20),
     AttendanceReasonmore nvarchar(20),--新老校区
     Attendancecampus nvarchar(80),-- 原因
     IFVacation nvarchar(1)
  )

declare @sum_count int,-- 总数据:0条
        @excel_count int,-- Excel 重复数据:0条
        @exit_count int,-- 已经存在的数据:0条
        @noexit_count int-- 不存在的工资号:0条

--*****变量赋值star
 --总记录数:
select @sum_count=count(*) from [Base_JiaQi1]
 -- Excel 重复数据:赋值
select @excel_count=count(*) from(
select workersnum,attendancedatatime from [dbo].[Base_JiaQi1]
group by workersnum,attendancedatatime
having(count(*))>1) tb_count
-- 不存在的工资号:赋值
select @noexit_count=count(*)
from (select  distinct workersnum,attendancedatatime 
from [dbo].[Base_JiaQi1])a left join [dbo].[Base_Worker] c on a.workersnum=c.Worker_code 
where c.Worker_code is  null
--print @noexit_count
-- 已经存在的数据:赋值
select @exit_count=count(*)
from  (select  distinct workersnum,attendancedatatime 
from [dbo].[Base_JiaQi1])a left join [dbo].[Base_JiaQi] b on b.workersnum+b.attendancedatatime=a.workersnum+a.attendancedatatime
where b.workersnum+b.attendancedatatime is not null
--print @exit_count
--*****变量赋值end

--*****插入表变量star
INSERT INTO @tb1 VALUES(0,'失败明细:','Excel 重复数据:'+convert(nvarchar(10),@excel_count)+'','不存在的工资号:'+convert(nvarchar(10),@noexit_count)+'','','','')
INSERT INTO @tb1 VALUES(1,'Excel 重复数据:',convert(nvarchar(10),@excel_count)+'','','','','')
INSERT INTO @tb1
select 2,Attendanname,Workersnum,Attendancedatatime,AttendanceReasonmore,Attendancecampus,IFVacation from [dbo].[Base_JiaQi1]
group by Attendanname,Workersnum,Attendancedatatime,AttendanceReasonmore,Attendancecampus,IFVacation
having(count(*))>1
INSERT INTO @tb1 VALUES(3,'不存在的工资号:',convert(nvarchar(10),@noexit_count)+'','','','','')
INSERT INTO @tb1
select 4,Attendanname,Workersnum,Attendancedatatime,AttendanceReasonmore,Attendancecampus,IFVacation
from (select  distinct Attendanname,Workersnum,Attendancedatatime,AttendanceReasonmore,Attendancecampus,IFVacation 
from [dbo].[Base_JiaQi1])a left join [dbo].[Base_Worker] c on a.workersnum=c.Worker_code 
where c.Worker_code is  null
--INSERT INTO @tb1 VALUES(5,'已经存在的数据:'+convert(nvarchar(10),@exit_count)+'条','','','','','')
--INSERT INTO @tb1
--select 6,a.Attendanname,a.Workersnum,a.Attendancedatatime,a.AttendanceReasonmore,a.Attendancecampus,a.IFVacation
--from  (select  distinct Attendanname,Workersnum,Attendancedatatime,AttendanceReasonmore,Attendancecampus,IFVacation
--from [dbo].[Base_JiaQi1])a left join [dbo].[Base_JiaQi] b on b.workersnum+b.attendancedatatime=a.workersnum+a.attendancedatatime
--where b.workersnum+b.attendancedatatime is not null
--*****插入表变量end

--返回的结果
SELECT Attendanname as 姓名,Workersnum as 工资号,Attendancedatatime as 时间
,AttendanceReasonmore as 校区,Attendancecampus as 原因,IFVacation as 是否假期
 FROM @tb1

--*****最终插入数据star
--1 自表去重(防止有重复记录)
;with a as(
select  distinct workersnum,attendancedatatime 
from [dbo].[Base_JiaQi1]
),
--select * from a
-- 2导入目标表-去重(防止重复导入)
bb as(
select a.workersnum+a.attendancedatatime as mykey ,a.workersnum
from  a left join [dbo].[Base_JiaQi] b on b.workersnum+b.attendancedatatime=a.workersnum+a.attendancedatatime
where b.workersnum+b.attendancedatatime is null
), 
--select * from bb
-- 3匹配规则表-去垃圾数据(去除不存在的职工编号)
cc as(
select bb.mykey
from bb left join [dbo].[Base_Worker] c on bb.workersnum=c.Worker_code 
where c.Worker_code is  not null
)
--select * from cc
--4 最终数据插入最终表
Insert into [dbo].[Base_JiaQi](Attendanname,Workersnum,Attendancedatatime,AttendanceReasonmore,Attendancecampus,IFVacation) 
select distinct d.Attendanname,d.Workersnum,d.Attendancedatatime,d.AttendanceReasonmore,d.Attendancecampus,d.IFVacation 
from  cc left join [dbo].[Base_JiaQi1] d on cc.mykey=d.workersnum+d.attendancedatatime 
--*****最终插入数据end



END
View Code

 

posted on 2017-03-25 17:52  邹敏向日葵  阅读(271)  评论(0)    收藏  举报

导航