功能: 可更新原来数据库已经存在的数据,然后插入新数据.
原理: 直接从上传的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