从中读取文件计划

2021-10-29 04:37:15 兴城星座网

SQL Server 2000使得以XML导出数据变得更加简单,但在SQL Server 2000中导入XML数据并对其进行处理则有些麻烦。

如果你参考BooksOnline(BOL),你会发现有相关的条目,包括OPENXML以及 OPENROWSET。所有的这些例子都支持将XML文本作为已经声明的变量,这对于经常处理文本的用户来说非常方便,但对于希望在开发中读取XML文件并进行相应处理的开发人员来说就不是这样了。处理这样的问题,或许最好从内到外来对其进行分析。

OPENXML是一个rowset函数(即返回一个rowset),它的工作方式类似于rowset函数OPENQUERY和OPENROWSET。使用OPENXML可以对XML数据执行JOINs操作而无需首先导入数据。你还可以将其同INSERT、SELECT、UPDATE以及DELETE等操作联合使用。

然而,要使用OPENXML,你必须执行两项OPENQUERY和OPENROWSET并不需要的任务。这两项任务需要两个系统存储进程。

第一个是sp_xml_preparedocument,它将读取特定的XML文本并将其内容提取到内存中。其语法如下:

sp_xml_preparedocument @hdoc = OUTPUT,

[, @xmltext = ]

[, @xpath_namespaces =

具体参数如下:

@hdoc:指向某内存区域的句柄(从作用上看等同于一个指针),相关数据存放在这里。注意这是一个输出变量,当该进程运行后,该变量将包含指向XML文件内容在内存地址的句柄。由于你需要在随后使用此结果,因此要确保对其进行保存;

@xmltext:实际上你所希望处理的XML文本;

@xml_namespaces:为了正常操作你的XML数据所需要的任何名字空间索引(namespace references)。注意在这里出现的任何URL都需要用尖括号()括起来;

假设所传递的这些参数都有效,并且XML文档存在,那么你的XML数据就会被存放到内存中去。现在你就可以调用sp_xml_preparedocument,传递存放有XML文件的变量,然后执行OPENXML。语法如下:

OPENXML(idocint [in],rowpatternnvarchar[in],[flagsbyte[in]])

[WITH (SchemaDeclaration | TableName)]

注意:在本文中没有足够的文字来描述OPENXML所接收的参数。请参阅BOL以获取更多信息。在Transact-SQLReference中查找OPENXML。

现在我们已经到达了最后的步骤。所有剩下的工作就是导入一个实际的XML文件到SQL并进行处理(很奇快为什么所有的BOL示例都没有涉及到这一关键的部分)。

(我必须感谢我的同事BillyPang所给予的帮助。他帮助我解决这个问题,并给出了代码——尽管出于本文需要我对代码进行了裁减。谢谢Billy!)

基本的技巧是,将文件逐行按文本读取。然后把所有读取的行连接为一个大的VARCHAR变量。最后,将变量传递给前面所说的代码。

以下就是读取文件并将其内容存放到某变量的代码:

DECLARE @FileName varchar(255)

DECLARE @ExecCmd VARCHAR(255)

记得罗马尼亚小组赛0∶1输给葡萄牙 DECLARE @y INT

DECLARE @x INT

DECLARE @FileContents VARCHAR(8000)

CREATE TABLE #tempXML(PK INT NOT NULLIDENTITY(1,1), ThisLine VARCHAR(255))

SET @FileName =\'C:l\'

SET @ExecCmd = \'type \' + @FileName

SET @FileContents = \'\'

INSERT INTO #tempXML _cmdshell @ExecCmd

SELECT @y = count(*) from #tempXML

SET @x = 0

WHILE @x @y

BEGIN

SET@x = @x + 1

SELECT @FileContents = @FileContents + ThisLine from #tempXML WHERE PK

= @x

END

SELECT @FileContents as FileContents

DROP TABLE #tempXML

现在在变量@FileContents变量中你已经获得了文件的全部内容。所需要做的只是将变量通过@xmltext参数传递给sp_xml_preparedocument,然后再调用OPENXML。

有了这种解决办法,对XML文档进行各种处理就成为了可能。你可以将XML文档同SQL表格连接在一起而无需导入数据,然后对这些数据进行INSERT、PDATE和DELETE等任何操作。

:李宁

欢迎评论或投稿

沈阳医院哪白癜风好
龙岩白癜风医院哪家好
乌鲁木齐治疗早泄费用
延展阅读
迎战中考!北京非涉疫初三同学今日返校

6月13日,北平市非涉疫八月高中生教职员长假。为迎接教职员们回老家家,各校在防疫、课程须要、无意识疏导等方面都好好了精巧坦诚的准备好,各项...

星座爱情2024.12.29
夏天穿戴T恤,别总穿戴黑白灰,这3种“流行色”才高级,衬肤又显白

到了春天,T恤可以问道是这个季节里面尤其主流的穿戴乘坐单品,音乐风格百变、蓝色多样,每个人的衣柜里面会有好几件,在日常里面不管是混和衬衫...

星座爱情2024.12.16
快改!这8个错误的磨练方式,小心越练病越多!

如今不少成年人开始通过各种方法体魄陶冶但很多时候有些社就会社区活动 不仅能够“最弱 身下”甚至还就会“伤身下”成年人有哪些有误的锻炼方法...

星座爱情2024.10.28
堪比好莱坞大片,看老黄如何运用三十六计,破2022高考数学分析的堡垒

2022年中考微积分全国卷I的填空压轴题,考卷人是铁了心要和试卷们自觉斗勇了。因为这道题要用于三本书中所的“天衣无缝”,还要运用春雷中所的无...

星座爱情2024.10.20
西部数据发布新款 SATA 蓝盘 SA510,1TB 价格约 671 元

IT之家 5 年底 22 日死讯,据 computerbase 死讯,西部数据发布了新款 WD Blue SA510 气态BIOS,包括 SATA 和 M.2 两种型号。 据另据,WD Blue SA510 SATA SSD 的目标Gmail...

星座爱情2024.10.11
40个高实用性面试问题,来自这个星球最敏锐的一群科技高管

40个高价值报名补救办法,来自这个将会世界最老练的一群生物科技娱乐业 本文经公众号胖福冰糖(amazingfounder)授权投载。 我一直指出,必需要指借助...

星座爱情2024.10.06
7翌年2日,不见不散!

念过物新时代,喜迎二十大 一年一度的自愿性念过物盛会 刚开启 7月末2日至6日 十一届浙江签名会 将在苏州博览馆中所心主展场 和全县152个都将、2个...

星座爱情2024.10.02
湘南学院举行就业创业典型毕业生访谈展览

为引导大教师立起应该的业余球队名曰、低收入名曰和择业名曰,希望大教师积极投身到各阶层,把参加者令人满意融入现代化国际组织新建新征程,静...

星座爱情2024.09.05
改变自己,从不更糟开始

我们这有生之年,要亲身经历的事情以致于了,不负责任的事情也以致于了。 大多数时候,我们也可能相合难平,可能会责备和揶揄。不来过太过身旁责...

星座爱情2024.08.14
福石上市公司(300071.SZ)拟于北京石景山区参与打造数字经济及元宇宙产业协同平台

福石全资(300071.SZ)公告,公司与北京市昌平区传统创新行业拓展基金有限责任公司、中关村大数据行业该联盟等就合作专营元太阳系领域内制造与行业战...

星座爱情2024.08.13