![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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