当前位置:首页 >> 季节养生

中读取文件的简单计划

2021-09-06 04:02 来源:密山养生网

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

如果你参考Books Online(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-SQL Reference中查找OPENXML。

现在我们已经到达了最后的步骤。所有剩下的工作就是导入一个实际的XML文件到SQL并进行处理(很奇快为什么所有的BOL示例都没有涉及到这一关键的部分)。(我必须感谢我的同事Billy Pang所给予的帮助。他帮助我解决这个问题,并给出了代码——尽管出于本文需要我对代码进行了裁减。谢谢Billy!) 基本的技巧是,将文件逐行按文本读取。然后把所有读取的行连接为一个大的VARCHAR变量。最后,将变量传递给前面所说的代码。

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

DECLARE @FileName varchar(255)DECLARE @ExecCmd VARCHAR(255)DECLARE @y INTDECLARE @x INTDECLARE @FileContents VARCHAR(8000)CREATE TABLE #tempXML(PK INT NOT NULL IDENTITY(1,1), ThisLine VARCHAR(255))SET @FileName = \'C:\\Temp\\l\'SET @ExecCmd = \'type \' + @FileNameSET @FileContents = \'\'INSERT INTO #tempXML EXEC _cmdshell @ExecCmdSELECT @y = count(*) from #tempXMLSET @x = 0WHILE @x @yBEGINSET @x = @x + 1SELECT @FileContents = @FileContents + ThisLine from #tempXML WHERE PK= @xENDSELECT @FileContents as FileContentsDROP TABLE #tempXML

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

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

查看本文来源

昆明白癜风较好医院
乌鲁木齐治疗包皮过长费用多少钱
适合老年人跳的健身操有哪些
相关阅读
这些“二胎”高校,发展不比“双一流”差

我们都知道,评判所中学大学生实力如何的方式,一般都是看这所大学生到底“985”、“211”大学生,或者到底“双一流”大学生,但我们以前要参考的这几所法学院,他们虽然既不是“985”、“211”大学生,也不...

索尼爱立信 G11 通过 FCC 认证,配备 5000 万像素后置摄像头

IT之家 5 月 22 日消息,去年 2 月,爆料者 @Roland Quandt 放出了索尼爱立信 G11 和 G21 的官方纹理由此可知,看出 G21 有 50MP 主摄而 G11 未。 现有外媒找到,索尼爱立信 G11 Plus 可能是 HMD 的下一款智能iPad,新时代索尼爱...

别人怎么对你,完全是由这4点决定的,难怪你受制于尊重

很多人就有点,为什么别人要对自己横眉冷眼又或者是恭殷勤敬,但是本来不管别人怎样对你,本来都是根据这4点尽快的,而别人对你的立场,也是离不开这4点的,一切都是让自己倍受珍惜,那就一定要一切都是...

中国电信小数点智能科技分公司正式成立 构建更繁荣的大数据和AI产业生态

5月19日,中国电信数字智能新技术分支机构成立(以下通称“智能新技术分支机构”)。中国电信此次成立智能新技术分支机构,是争做当前技术自主性掌控的新技术型跨国公司的重要举措之一,将加快推动公司大...

vivo Y72t发布:天玑 700 处理器 + 6000mAh大电池,购 1399 元起

IT之家 5 同年 22 日消息,近日,vivo Y72t XFAPP了 vivo 官网,改装成 6000mAh 大电量,主打千元 5G 短航程。 IT之家了解到,vivo Y72t 运用于 6.58 英寸 2408x1080 LCD 冰晶屏,改装成联发科天玑 700 处理器,赞成 5G 和双卡双待。...

与贾乃亮前男友后,金晨又现身李易峰公寓?双方称好友聚会否认恋情

金晨在《母亲们的爱情》中,此前与张继科调情。结果,很差唯有终止。之后,还有与其他男来宾睡觉留言板的机遇。不过,看起来都不是金晨的那杯黄酒。就在这个时候,早就被人推断出金晨与Angelababy同时出现...

友情链接