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
相关文章推荐
- 用于层次结构数据库批量导入(Insert)的存储过程
- 利用存储过程将Excel中数据导入到数据库表中
- Sql 导入 EXCEL 通用存储过程
- mysql 导入导出数据库以及函数、存储过程
- mysql 导入导出数据库以及函数、存储过程的介绍
- mysql 导入导出数据库以及函数、存储过程
- 存储过程将.txt.xls文件数据导入数据库表格
- 用java实现excel数据批量导入数据库
- Java操作Excel(三)将Excel中的数据批量的导入数据库
- 存储过程学习-批量插入10000条数据进数据库
- C#连接数据库、读EXCEL表、批量导入数据
- 一个将数据导出到EXCEL的存储过程-数据库专栏,SQL Server
- Java操作Excel(三)将Excel中的数据批量的导入数据库
- 从excel导入数据库过程中遇到的空格转义符( )
- [导入]批量插入数据的存储过程
- 留个记念,第一次写这么长的存储过程。关于台湾地址excel中数据从一张表中导入另一张不同结构的表!
- 将Excel表中的数据批量导入到数据库
- 使用ExcelFileParser处理excel获得数据 可作批量导入到数据库使用
- oracle验证批量导入存储过程
- Excel导入数据库过程中遇到的问题