您的位置:首页 > 数据库

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

2017-03-25 17:52 447 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: