0
点赞
收藏
分享

微信扫一扫

SQL Server2000 数据表导出XML方法


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"/>

  • 在带 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

        DataSet1.ReadXml("C:/Test.XML")

        Dim tb As

        Dim dv As

        tb = DataSet1.Tables(0)

        dv = New

        DataGrid1.DataSource = dv

End Sub


举报

相关推荐

0 条评论