sql server导入excel和多表关联更新 东师理想

1.开启SQL SERVER的'Ad Hoc Distributed Queries'开关,需要用拥有服务器sysadmin角色权限的登录帐号

exec sp_configure 'show advanced options',1;reconfigure;
exec sp_configure 'Ad Hoc Distributed Queries',1;reconfigure;

执行后,控制台输出

2.创建临时表T_EXCELTOSQL_TEMP,将excel中数据导入

--导入EXCEL  JET引擎:Microsoft.Jet.OLEDB.4.0(导入office97-2003) ACE引擎:Microsoft.ACE.OLEDB.12.0(导入office2007-2010)
--Data Source是服务器存放excel的路径
--“一年级”是excel中sheet名,$必填
 SELECT * INTO T_EXCELTOSQL_TEMP
 FROM OpenDataSource( 'Microsoft.ACE.OLEDB.12.0',
 'Data Source="d:\fs.xls";User ID=Admin;Password=;Extended properties=Excel 12.0')...[一年级$]

导入后表结构为

3.根据业务需要,为临时表添加字段

ALTER TABLE T_EXCELTOSQL_TEMP   ADD NF VARCHAR(4) null ;    --入学年份
ALTER TABLE T_EXCELTOSQL_TEMP   ADD BH VARCHAR(2) null ;    --班号
ALTER TABLE T_EXCELTOSQL_TEMP   ADD BH_INT int null ;        --班号int类型
ALTER TABLE T_EXCELTOSQL_TEMP   ADD bj_id CHAR(36) null ;    --班级ID

4.为新字段赋值

--修改录入相关数据
UPDATE dbo.T_EXCELTOSQL_TEMP SET nf=SUBSTRING(班级名称,1,4),bh=SUBSTRING(班级名称,5,2),BH_INT=CAST(SUBSTRING(班级名称,5,2) AS INT);
----------------------------------------------------------
--多表关联更新
UPDATE t1 SET t1.bj_id=t2.bj_id FROM  dbo.T_EXCELTOSQL_TEMP t1 INNER JOIN dbo.T_XG_CLASS t2 ON t1.NF=t2.RXNF AND t1.BH_INT=t2.BH
WHERE SCHOOL_ID=100;

5.基本的导入和更新步骤已经完毕,其他根据个人业务操作,执行完成后,因为安全性问题,需要关闭'Ad Hoc Distributed Queries'开关

exec sp_configure 'Ad Hoc Distributed Queries',0;
reconfigure;exec sp_configure 'show advanced options',0;reconfigure;

 执行结果

原文地址:https://www.cnblogs.com/cczhoufeng/p/2513485.html