打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
数据导入(存储过程读取excel)

适用CIIS,CMIS,ZYT,ECRM

数据导入(存储过程读取excel)

功能: 可更新原来数据库已经存在的数据,然后插入新数据.

原理: 直接从上传的excel表中读取,存入临时表,更新数据库表中与临时表中相同主键字段的数据,再删除临时表中在数据库表中已经存在的记录,再插入临时表剩余的新数据.

来源:同事.

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO


--=======================================================
/*
funciton:补贴扣除导入
coder:zx
datetime:2009-10-14

[P_Import_Transportation] 0,'\\192.168.0.2\hglwpqvss\uploadFile\月度岗位补贴扣除表20091022150944_20091022031241.xls','2009-10-01','35242100'

*/
--=======================================================
ALTER proc [dbo].[P_Import_Transportation]
@UserID     int,      --操作人
@FilePath    varchar(1000),    --文件路径
@DataTime    datetime,     --数据月份
@OrganizationalNum2 varchar(50),    --二级单位
@rc      int=null output,
@info     varchar(100)=null output
as
begin
declare @WONum varchar(50)
select @WONum=WorkOrderNum from T_E_WorkOrder where and and AATID=18
if(@WONum is null)
begin
   set @rc=-1
   set @info='工单未建立'
   return
end

declare @Count_Employee int,@Count_Excel int,@SQL varchar(8000),@Add int,@Update int

create table #Temp_TableAD
(序号      int identity(1,1),
三级部门     varchar(200),
Mis员工编号     varchar(50),
-- 员工编号     varchar(50),
员工姓名     varchar(50),
补贴交通费员工类型   varchar(50),
交通费      decimal(18,2))

set @SQL='insert into #Temp_TableAD(三级部门,Mis员工编号,员工姓名,补贴交通费员工类型,交通费)'+
          'select 三级部门,Mis员工编号,员工姓名,补贴交通费员工类型,isnull(交通费,0),'+
          ' from OpenDataSource( ''Microsoft.Jet.OLEDB.4.0'','+'''Excel 8.0; HDR=Yes; IMEX=1;'+
          'Data ID=;Password=;'')...[交通费信息$] WHERE isnull(员工编号,'''') <> '''''  
print @SQL

exec(@SQL)
-- select * from #Temp_TableAD
--模板数据逻辑验证
if exists(select 1 from #Temp_TableAD group by 员工编号 having(count(1)>1))
begin
   set @rc = -1
   set @info='数据错误,出现重复员工编号'
   return
end

--二级单位本月份在职员工数
-- select @Count_Employee=count(1)
-- from T_E_Employee a
-- inner join T_H_EmployeeAttribution b on a.EmployeeNum=b.EmployeeNum and
-- where and a.DataState=1
--
-- --Excel中员工数
-- select @Count_Excel=count(1) from #Temp_TableAD

--print @Count_Employee
--print @Count_Excel
-- --员工数验证
-- if(@Count_Employee > @Count_Excel)
-- begin
--   set @rc = -2
--   set @info='存在未导入的员工'
--   return
-- end

/*数据导入*/  
--更新已有数据
update T_E_EmployeeTransportation
set
   Transportation = 交通费,
   PTTYPE=补贴交通费员工类型
from T_E_EmployeeAllowanceDeduction a ,#Temp_TableAD
where a.MisEmployeeNum = Mis员工编号 and

set @Update=@@rowcount

--删除已更新数据
delete #Temp_TableAD
from T_E_EmployeeTransportation a ,#Temp_TableAD
where a.MisEmployeeNum = Mis员工编号 and

--新增数据
insert into dbo.T_E_EmployeeTransportation(DataTime,MisEmployeeNum,PTType,Transportation,OrganizationalNum2,WONum)
select @DataTime,Mis员工编号,补贴交通费员工类型,交通费,@OrganizationalNum2,@WONum from #Temp_TableAD
set @Add=@@rowcount

set @rc=1
set @info='共导入 '+cast(@Add+@Update as varchar)+' 条数据,其中 ' + cast(@Update as varchar) + ' 条更新; ' + cast(@Add as varchar) + ' 条新增'
print @info
end

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
关键字检索,找到所有数据
oracle存储过程中的事务
用EXCEL做调查问卷
Excel教程 · VBA的秘密武器
利用SQLite_Expert实现Excel表转SqLite数据库
用SQL语句删除重复记录的四种方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服