【问题标题】:Convert XML datatype in SQL 2005 into a relational resultset将 SQL 2005 中的 XML 数据类型转换为关系结果集
【发布时间】:2008-12-04 22:11:36
【问题描述】:

我在 SQL 2005 数据库中有一个表,其中包含定义为 xml 数据类型的列。我正在尝试编写查询 xml 并从 select 语句返回结果集的存储过程。我已经看到了返回标量值或 xml 的示例,但没有看到如何返回结果集。

我将不得不使用 openxml 还是有其他解决方案?

【问题讨论】:

    标签: xml sql-server-2005 types


    【解决方案1】:

    xml 数据类型有自己的一组方法,您可以使用这些方法来处理列中的数据。在这种情况下,你可能会使用这样的东西:

    select xmlColumnName.value('XpathExpression', 'outputSqlType') from dataTable
    

    例如,

    select xmlColumnName.value('/root/node[@name="myname"]', 'varchar(60)')
    

    方法有query()、value()、exist()、modify()和nodes(),你可以在Books Online了解更多。

    【讨论】:

      【解决方案2】:

      您可以使用 xml 数据类型或 OPENXML。另一个发帖人给出了xml数据类型的例子,所以这里是一个OPENXML例子。

      这确实取决于 XML 模式。 SQL Server 可能不太喜欢您的架构。如果您对架构有任何控制权,那么它会有所帮助。您最终可能不得不使用表变量并通过多次调用 OPENXML 来构建数据来查询所有内容。

      例如,可以如下处理 XML 输入:

      DECLARE @idoc int
      DECLARE @doc nvarchar(max)
      
      SET @doc = '
      <xml>
          <Entry Type="Error" Start="2008-11-19 02:16:00" End="2008-11-20 04:55:00" />
          <Entry Type="Success" Start="2008-11-25 12:45:00" End="2008-11-25 13:01:00" />
      </xml>'
      
      
      EXEC sp_xml_preparedocument @idoc OUTPUT, @xml
      
      SELECT   [EventType]
              ,[EventStart]
              ,[EventEnd]
      FROM    OPENXML (@idoc, '//Event',1)
              WITH    ([Type]         varchar(30)
                      ,[Start]        varchar(30)
                      ,[End]          varchar(30)
      )
      

      我面临的一个挑战是解析 XML 日期(带有“T”和可能时区的 ISO8601)。我最终用一行代码创建了一个 .NET 程序集,将其转换为 SQL 喜欢的日期时间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-22
        • 2012-10-19
        • 2016-06-02
        • 2011-08-05
        • 2015-02-13
        相关资源
        最近更新 更多