English 中文(简体)
利用Sql服务器中的XQuery到Parse XML 复杂类型
原标题:Using XQuery in Sql Server to Parse XML Complex types

我有以下XML:

<Feed>
  <FeedId>10</FeedId>
   <Component>
     <Date>2011-10-01</Date>
     <Date>2011-10-02</Date>
   </Component>
</Feed>

现在,如果可能的话,我要将XML分成几节,以便按序输入以下关系数据:

FeedId   Component_Date
10       2011-10-01
10       2011-10-02

然而,使用以下表格:

DECLARE @XML XML;
DECLARE @XMLNodes XML;
SET @XML =  <Feed><FeedId>10</FeedId><Component><Date>2011-10-01</Date><Date>2011-10-02</Date></Component></Feed> ;

SELECT  t.a.query( FeedId ).value( . ,  INT ) AS FeedId
    ,t.a.query( Component/Date ).value( . ,  VARCHAR(80) ) AS [Component_Date]
    FROM @XML.nodes(  /Feed ) AS t(a)

我得最接近的是:

FeedId  Component_Date
10  2011-10-012011-10-02

因此,这些数值出现在同一个行文中,能否达到我想要使用锡克文的东西?

最佳回答

由于你在XML内有多个条目,你需要第二次打电话到.nodes():

SELECT  
    t.a.value( (FeedId)[1] ,  INT ) AS FeedId,
    c.d.value( (.)[1] ,  DATETIME ) AS [Component_Date]
FROM 
    @XML.nodes( /Feed ) AS t(a)
CROSS APPLY
    t.a.nodes( Component/Date ) AS C(D)

我的产物是:

FeedId  Component_Date
  10    2011-10-01 00:00:00.000
  10    2011-10-02 00:00:00.000
问题回答

• 我可以使用OPENXML方法:

eclare @idoc int
DECLARE @XML XML;
DECLARE @XMLNodes XML;
SET @XML =  <Feed><FeedId>10</FeedId><Component><Date>2011-10-01</Date><Date>2011-10-02</Date></Component></Feed> ;

exec sp_xml_preparedocument @idoc OUTPUT, @XML
-- SELECT stmt using OPENXML rowset provider
SELECT *
FROM   OPENXML (@idoc,  /Feed/Component/Date ,1)
         WITH (
                FeedId              Int          ../../FeedId ,
                ComponentDate       Date          text() 
               )




相关问题
SQL SubQuery getting particular column

I noticed that there were some threads with similar questions, and I did look through them but did not really get a convincing answer. Here s my question: The subquery below returns a Table with 3 ...

难以执行 REGEXP_SUBSTR

I m 查询Oracle 10g。 我有两张表格(样本数据见下文)。 i m 试图提取一些领域

SQL Query Shortcuts

What are some cool SQL shorthands that you know of? For example, something I learned today is you can specify to group by an index: SELECT col1, col2 FROM table GROUP BY 2 This will group by col2

PHP array callback functions for cleaning output

I have an array of output from a database. I am wondering what the cleanest way to filter the values is example array Array ( [0] => Array ( [title] => title 1 ...

OracleParameter and DBNull.Value

we have a table in an Oracle Database which contains a column with the type Char(3 Byte). Now we use a parameterized sql to select some rows with a DBNull.Value and it doesn t work: OracleCommand ...

Running numbers in SQL

I have a SQL-statement like this: SELECT name FROM users WHERE deleted = 0; How can i create a result set with a running number in the first row? So the result would look like this: 1 Name_1 2 ...

How to get SQL queries for each user where env is production

I’m developing an application dedicated to generate statistical reports, I would like that user after saving their stat report they save sql queries too. To do that I wrote the following module: ...

热门标签