对未安装office,不支持excel各版本的数据库进行excel导入sqlserver

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

现在很多运营商越来越少自己部署服务器了,很多时候都是租用别的服务商的服务器,但这样就有很多麻烦事,比如数据库服务器没安装office,无法直接导入excel的内容

现在有一个稍微复杂点的办法来解决这个问题,而无需对服务器做任何部署变更,不用找服务商麻烦

第一步:将excel导入到本地数据库,因为一般来说,开发人员的环境是比较全的,一般都能导入,这个很简单

第二步:将导入的数据生成xml数据,这样,生成的xml数据就变成了纯文本,可以直接复制到目标服务器上进行处理

select * from 临时数据库 where 条件 order by 排序 for xml raw,root('r'),elements XSINIL

for xml raw 是让生成xml中,每条数据一个row节点,elements XSINIL是为了让null数据不被忽略

这样就可以得到一个很大的xml格式的纯文本了,需要注意的是,如果内容中有特殊符号,需要进行清除,否则解析xml会出错,例如ascii码小于32的字符,会生成1这样的字符,造成解析异常,这个需要自己处理

第三步:将xml解析成行列数据

declare @xml xml
declare @xml xml
set @xml = '复制的xml内容'
declare @handle int,@prepare int
exec @prepare = sp_xml_preparedocument @handle output,@xml
;with t as (
	select * from openxml(@handle,'/r',1)
),t1 as (
	select a.id as rowid,b.localname as columnname,convert(nvarchar(max),c.text) as val 
	from t a 
	left join t as b on b.parentid=a.id 
	left join t as c on c.parentid=b.id
	where a.parentid=0 and a.localname='row'
)
select row_number() over(order by rowid) as nid,*
into #t1
from t1 a
pivot(max(val) for columnname in (字段列表)) p

通过这种方式,就将xml数据导入到临时表#t1里了,然后就可以继续我们的操作了,不管是更新还是插入,或者作为依据进行其他操作

这里的字段列表就是第二步中的字段列表,例如:id,name,sex,state...

嗯,需要sqlserver2008以上版本吧,2005是否支持没测试

猜你喜欢

转载自blog.csdn.net/superwfei/article/details/91947707