网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > SQL技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.如何才能保障存储过程嵌套调用的.
.SQL SERVER 2005 EXPRESS不能远程.
.SQL2005中部署.net 3DES加密函数.
.深入讲解"database link"的设置和.
.分析及解决SQLServer死锁问题.
.SQL Server2000+JDBC常见问题及解.
.调查表明开源软件的维护与支持问.
.通过rownum隐式游标实现与TOP相似.
.快速解决SQL server 2005孤立用户.
.ms sql删除重复的记录 .
.SQL技巧:快速掌握一些异常精妙的.
.SQL SERVER数据库开发之存储过程.
.Sql Server 2000+Sql Server Mob.
.当SQL Server数据库崩溃时如何恢.
.SQL Server 7六种数据移动方法.
.日志方式转换及物理日志和逻辑日.
.如何使用SQL Server数据库嵌套子.
.锁现象通常分为死锁和锁等待两种.
.SQL Server的Collate语句需注意.
.Sql server优化50法.

SQL Server 2005 读取xml 文件 突破 varchar 8000 限制

发表日期:2007-6-2


最近公司与一家供应商合作,要求把供应商的xml 数据导入到我公司的数据库中,以方便业务处理.我公司使用的是SQL SERVER 2005 数据库.查了一下帮助文件,很简单的写了个脚本,如下:


SELECT * into #temp1 FROM OPENROWSET(
   BULK 'D:\0700000015.xml' ,SINGLE_CLOB  ) AS x
 DECLARE @hdoc int
 DECLARE @doc varchar(8000)
select @doc=BulkColumn  from #temp1

EXEC sp_xml_preparedocument @hdoc OUTPUT,@doc

SELECT * into #temp2
FROM OPENXML (@hdoc, '/AA/BB,2)
with  (A varchar(50),B varchar(50),C varchar(50)     )

exec sp_xml_removedocument @hdoc

先是使用一个较小的文件,测试了一下,通过.但当使用真正数据时,提示说XML 标记没有闭合.经查看,原来并没有把所有的数据都写入到@doc中,于是又找帮助,@doc 可以使用ntext ,text ,xml ,varchar,char等类型.试着改为ntext,text 都没有成功,原因是ntext ,text  类型不能直接定义成变量.于是使用了SQL Server 2005 的类型新成员:xml.结果是500KB以下的文件全部通过.当文件大于500KB时,还是报错.于是有回去看帮助.试着把SINGLE_CLOB   改为SINGLE_BLOB  .最终解决了问题.由于没有时间测试更大的文件,我只是试了在800KB以内的文件.其实,SINGLE_BLOB  代表的是varbinary(max)类型.能有多长是根据它来限制的.

最终更改如下:

SELECT * into #temp1 FROM OPENROWSET(
   BULK 'D:\0700000015.xml' ,SINGLE_BLOB  ) AS x
 DECLARE @hdoc int
 DECLARE @doc xml

select @doc=BulkColumn  from #temp1

EXEC sp_xml_preparedocument @hdoc OUTPUT,@doc

SELECT * into #temp2
FROM OPENXML (@hdoc, '/AA/BB,2)
with  (A varchar(50),B varchar(50),C varchar(50)     )

exec sp_xml_removedocument @hdoc

上一篇:sql 2005 express 远程访问和sa密码的问题 人气:4645
下一篇:Sql Server 2005 数据库维护计划 人气:4639
浏览全部SQL Server 2005 的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐