SQL Server 2000使得以XML导出数据变得更加简单,但在SQL Server 2000中导入XML数据并对其进行处理则有些麻烦。本文介绍在SQL Server中读取XML文件的简单做法。

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 INT
  DECLARE @x INT
  DECLARE @FileContents VARCHAR(8000)
  CREATE TABLE #tempXML(PK INT NOT NULL IDENTITY(1,1), ThisLine VARCHAR(255))
  SET @FileName = 'C:TempCurrentSettings.xml'
  SET @ExecCmd = 'type ' + @FileName
  SET @FileContents = ''
  INSERT INTO #tempXML EXEC master.dbo.xp_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等任何操作。

SQL Server中读取XML文件的简单做法相关推荐

  1. [转帖]C#执行SQL脚本,读取XML文件

    [转帖]C#执行SQL脚本,读取XML文件 需要添加如下引用: using System.IO; using System.Data.SqlClient; using System.Collectio ...

  2. SQL Server中的数据库文件组和零碎还原

    So far, we discussed many de-facto details about SQL Server database backup and restore. In this 15t ...

  3. C#中读取XML文件方法

    C#中读取XML文件方法 XML 简介 格式 c#读取XML文件方法 使用XmlDocument 操作 注意 解决方法: 使用XmlTextReader/XmlTextWriter 操作 使用Linq ...

  4. matlab分析xml文件_如何在Java中读取XML文件(DOM分析器)

    matlab分析xml文件 Today we will learn how to read the XML file in Java. We will also learn how to parse ...

  5. 在SQL Server中读取事务日志-从黑客到解决方案

    The SQL Server transaction log is akin to a 'Black box' in an airliner. It contains all of the recor ...

  6. SQL Server中的即时文件初始化概述

    This article gives an overview of Instant File Initialization and its benefits for SQL Server databa ...

  7. C#中读取xml文件指定节点

    假设xml文件内容是 <?xml version="1.0" encoding="utf-8"?> <Workflow>   <A ...

  8. sql server中对xml进行操作

    一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和参数.为了更好地支持 XM ...

  9. 如何对SQL Server中的XML数据进行insert、update、delete .

    SQL Server 2005/2008增加了对XML数据的支持,同时也新增了几种操作XML的方法,本文主要以SQL Server 2008为例介绍如何对XML数据进行insert.update.de ...

最新文章

  1. Conficker蠕虫新动作 P2P更新5月份关闭
  2. leetcode 153. Find Minimum in Rotated Sorted Array | 153. 寻找旋转排序数组中的最小值(二分查找)
  3. linux mysql服务基础操作(二)
  4. 【汇总】pytorch里的一些函数
  5. 云南科软信息科技有限公司
  6. 错误调试:failed to allocate 4.75G (5102921216 bytes) from device: CUDA_ERROR_OUT_OF_MEMORY
  7. Ansible详解(十五)——Ansible Role实战
  8. 最大熵模的理解与最大熵模型逻辑回归相似转换条件
  9. AS1.3 及其以上预览版新插件-实验版(NDK)
  10. 材料成型及控制工程学计算机吗,材料成型及控制工程专业属于什么学科
  11. 小米air2se耳机只有一边有声音怎么办_小米真无线蓝牙耳机Air2 SE评测:仅需169元,享受随心畅听体验...
  12. 砂糖橘文案:水果砂糖橘的文案,水果文案砂糖橘
  13. Sql Server常用命令整理篇:生成连续日期序列并循环
  14. 魔法师元素平衡(C++解法)
  15. IPHONE苹果手机短信短消息备份导出,格式分析,数据库sqlite
  16. 记录一次关于解除推特的冻结
  17. 亚马逊索评邮件什么时候发送效果最佳
  18. NavigationController 常用方法归总
  19. 倒水问题(两个杯子)
  20. 工程流体力学笔记暂记9(伯努利方程在工程中的应用)

热门文章

  1. smarty mysql_Smarty处理mysql查询数组
  2. python怎么查看代码错误_python中的错误如何查看
  3. python自动排课表_【python-leetcode210-拓扑排序】课程表Ⅱ
  4. 支持placeholder和自适配高度的TextView控件
  5. 如何设计一个 iOS 控件?(iOS 控件完全解析)
  6. 积极拥抱.NET Core开源社区
  7. 使用hql动态创建对象问题
  8. C# Window编程随记——ClickOnce程序部署
  9. Apache Hive 快速入门 (CentOS 7.3 + Hadoop-2.8 + Hive-2.1.1)
  10. Docker 公司是如何做社区的?