• 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
  • 相关阅读:
    HDU-3555-Bomb
    hihoCoder-1015-KMP
    HDU-1251-统计难题
    hihoCoder-1014-Trie树
    BZOJ-4326: NOIP2015 运输计划 (二分+LCA+树上差分)
    BZOJ-1607: [Usaco2008 Dec]Patting Heads 轻拍牛头 (筛法暴力)
    BZOJ-1419: Red is good (期望DP)
    BZOJ-1798: [Ahoi2009]Seq 维护序列seq & BZOJ-5039: [Jsoi2014]序列维护 (线段树)
    BZOJ-3732: Network (kruskal+LCA)
    BZOJ-1787: [Ahoi2008]Meet 紧急集合 (LCA)
  • 原文地址:https://www.cnblogs.com/zoumin123/p/6617843.html
Copyright © 2020-2023  润新知