SQL Server2000 数据表导出XML方法
1. For XML 语句
1)语法:
FOR XML mode [, XMLDATA] [, ELEMENTS][, BINARY BASE64]
2)参数:
l XML mode
指定 XML 模式。XML 模式决定所得到的 XML 的形式。
mode 可以是 RAW、AUTO 或 EXPLICIT。
-
l XMLDATA
指定应返回 XML-Data 架构。文档的架构被预先设计为内嵌式架构。
-
l ELEMENTS
如果指定 ELEMENTS 选项,则列作为子元素返回。否则,列将映射到 XML 特性。只有在 AUTO 模式下才支持该选项。
-
l BINARY BASE64
如果指定 BINARY Base64 选项,则查询所返回的任何二进制数据都用base64 编码格式表示。使用 RAW 和 EXPLICIT 模式检索二进制数据时,必须指定该选项。在 AUTO 模式中,默认情况下将二进制数据作为引用返回。
2. FOR XML 子句的使用准则
-
l 无论在 UPDATE、INSERT 或 DELETE 语句、嵌套 SELECT 语句还是其它语句(SELECT INTO、赋值语句)中,FOR XML 在子选择中都无效。例如
例1:SELECT * FROM Table1 WHERE ......(SELECT * FROM Table2 FOR XML RAW) 例2:DECLARE @doc nchar(3000) SET @doc = (SELECT * FROM Customers WHERE CustomerID = 'ALFKI' FOR XML RAW) |
-
l 对于与 COMPUTE BY 或 FOR BROWSE 子句一起使用的任何选择语句,FOR XML 都无效,例如:
例1:SELECT OrderID, UnitPrice FROM [Order Details] ORDER BY OrderID COMPUTE SUM(UnitPrice) BY OrderID |
- 当前不支持 GROUP BY 和聚合函数与 FOR XML AUTO 共同使用。例如:
例1:SELECT max(price), min(price), avg(price) FROM titles FOR XML AUTO |
-
l FOR XML 在用于视图定义或用于返回行集的用户定义函数的 SELECT 语句中无效。
下面的语句无效: CREATE VIEW AllOrders AS SELECT * FROM Orders FOR XML AUTO 下面的语句可行: SELECT * FROM ViewName FOR XML AUTO are allowed |
-
l FOR XML 无法用于需要在存储过程中进一步处理的选择语句。
-
l FOR XML 不能与游标一起使用。
-
l 一般情况下,FOR XML 无法不能不直接将结果输出到SQL Server 2000 客户端的任何选择语句。
-
l FOR XML 无法用于在 INSERT 语句中调用的存储过程。
-
l 如果带 FOR XML 子句的 SELECT 语句在查询中指定一个由四部分组成的名称,则在本地计算机上执行查询时,在所得到的 XML 文档中将不返回这个服务器名称。但是,当在网络服务器上执行查询时,将返回这个由四部分组成的服务器名称。
例如:当使用下面的语句查询: SELECT TOP 1 LastName FROM ServerName.Northwind.dbo.Employees FOR XML AUTO A.当 ServerName 是本地服务器时,该查询返回: <Northwind.dbo.Employees LastName="Buchanan"/> B.当 ServerName 是网络服务器时,该查询返回: <ServerName.Northwind.dbo.Employees LastName="Buchanan"/> 以上的问题,通过指定别名可避免上述现象: SELECT TOP 1 LastName ROM ServerName.Northwind.dbo.Employees x FOR XML AUTO 该查询返回:<x ="Buchanan"/> |
- 在带 FOR XML AUTO 子句的 SELECT 语句中使用派生表可能不会产生希望的嵌套。
3. sp_makewebtask
创建一项生成 HTML 文档的任务,该文档包含执行过的查询返回的数据。
语法
sp_makewebtask [@outputfile =] 'outputfile', [@query =] 'query'
[, [@fixedfont =] fixedfont]
[, [@bold =] bold]
[, [@italic =] italic]
[, [@colheaders =] colheaders]
[, [@lastupdated =] lastupdated]
[, [@HTMLheader =] HTMLheader]
[, [@username =] username]
[, [@dbname =] dbname]
[, [@templatefile =] 'templatefile']
[, [@webpagetitle =] 'webpagetitle']
[, [@resultstitle =] 'resultstitle']
[ [, [@URL =] 'URL', [@reftext =] 'reftext']
| [, [@table_urls =] table_urls, [@url_query =] 'url_query']
]
[, [@whentype =] whentype]
[, [@targetdate =] targetdate]
[, [@targettime =] targettime]
[, [@dayflags =] dayflags]
[, [@numunits =] numunits]
[, [@unittype =] unittype]
[, [@procname =] procname ]
[, [@maketask =] maketask]
[, [@rowcnt =] rowcnt]
[, [@tabborder =] tabborder]
[, [@singlerow =] singlerow]
[, [@blobfmt =] blobfmt]
[, [@nrowsperpage =] n]
[, [@datachg =] table_column_list]
[, [@charset =] characterset]
[, [@codepage =] codepage]
参数
[@outputfile =] 'outputfile'
在 Microsoft SQL Server的实例上生成的 HTML 文件的位置。如果文档将在远程计算机上生成,则该参数可以是 UNC 名称。outputfile 的数据类型为 nvarchar(255),没有默认值。
[@query =] 'query'
要运行的查询。query 的数据类型为 ntext,没有默认值。当通过 sp_runwebtask 运行任务时,查询结果将以表格形式显示在 HTML 文档中。可以指定多个 SELECT 查询,从而导致在 outputfile 中显示多个表。
[@fixedfont =] fixedfont
指定查询结果是以固定字体 (1) 还是以成比例字体 (0) 显示。fixedfont 的数据类型为 tinyint,默认值为 1。
[@bold =] bold
指定查询结果是以粗体 (1) 还是非粗体 (0) 显示。bold 的数据类型为 tinyint,默认值为 0。
[@italic =] italic
指定查询结果是以斜体 (1) 还是非斜体 (0) 显示。italic 的数据类型为 tinyint,默认值为 0。
[@colheaders =] colheaders
指定查询结果是带列标题 (1) 还是不带列标题 (0) 显示。colheaders 的数据类型为 tinyint,默认值为 1。
[@lastupdated =] lastupdated
指定所生成的 HTML 文档是否显示"上次更新时间:"时间戳指示上次更新的日期和时间 (1) 或者没有时间戳 (0)。在 HTML 文档中,时间戳出现在查询结果的前一行。lastupdated 的数据类型为 tinyint,默认值为 1。
[@HTMLHeader =] HTMLHeader
指定用于显示包含在 resultstitle 中的文本的 HTML 格式代码。HTMLheader 的数据类型为 tinyint,可以是下列值之一。
值 HTML 格式代码
1 H1
2 H2
3 H3
4 H4
5 H5
6 H6
[@username =] username
是执行查询的用户名。username 的数据类型为 nvarchar (128),默认设置为当前用户。系统管理员或数据库所有者可以指定其它用户名。
[@dbname =] dbname
在其上运行查询的数据库名。dbname 的数据类型为 nvarchar(128),默认值为当前数据库。
[@templatefile =] 'templatefile'
用于生成 HTML 文档的模板文件的路径。模板文件包含 HTML 文档的格式特征信息和标记 <%insert_data_here%>,该标记指示将查询结果添加到 HTML 表中的位置。templatefile 的数据类型为 nvarchar(255)。
4. 导出XML实例
1)新建一个模板文件TEMPXML.tmp,内容为:
<?xml version="1.0" standalone="yes"?> <DataSet1 xmlns="http://www.tempuri.org/DataSet1.xsd"> <%begindetail%> <%insert_data_here%> <%enddetail%> </DataSet1> |
2)在查询分析器中执行SQL语句:
Use Northwind --此处可以修改为相应的数据库名 GO --通过系统存储过程sp_makewebtask,将查询结果导出为XML文件C:/Test.xml EXEC sp_makewebtask @outputfile = 'C:/Test.xml', @query = 'Select Top 5 * From EC_Student for XML Auto,ELEMENTS', @templatefile ='C:/TEMPXML.tmp' |
3)利用.NET读取XML文件:
A.在窗体中创建一个DataGrid,一个按钮Button B.在按钮事件中输入以下内容: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click DataSet1.ReadXml("C:/Test.XML") Dim tb As DataTable Dim dv As DataView tb = DataSet1.Tables(0) dv = New DataView(tb) DataGrid1.DataSource = dv End Sub |