0

SQLServerでのXMLプログラミングは初めてです。これはおそらく皆さんにとって簡単な質問になるでしょう!

SQL Server 2005にTestXMLというデータベーステーブルがあります。これには、xmlデータ型のtestXML列が1つあります。この列のデータは次の形式です。

<TEST name="testName" status="Completed">
    <Status CompletedOn="2011-11-01T01:12:13Z"/>
    <Bar number="1" status="Pending">
        <Control RequestDate="2011-11-30T01:12:13Z"/>
    </Bar>
    <Bar number="2" status="Pending">
        <Control RequestDate="2011-11-30T01:11:13Z"/>
    </Bar>
    <Bar number="3" status="Pending">
        <Control RequestDate="2011-11-30T01:13:13Z"/>
    </Bar>
</TEST>

Bar / Control / @ RequestDateから最大RequestDateを返すクエリを作成したいので、上記の例では、クエリが-2011-11-30T01:13:13Zを返すようにします。

これまでのところ、私は試しました:

SELECT testXML.query('max(//@RequestDate)') from TestXml
WHERE testXML.value('(/TEST/@status)[1]', 'varchar(20)') = 'Completed'

これは空白の値を返します....試してみるとtestXML.query('max(//string(@RequestDate))')次のエラーが発生します:

XQuery [TestXml.testXML.query()]:XQuery構文'/ function()'はサポートされていません。

誰かが私がこのクエリを書くのを手伝ってくれませんか。よろしくお願いします。

4

1 に答える 1

0

一時テーブルを使用して、なんとか機能させることができました。解決策にはあまり満足していませんが、これを書くためのより良い方法があるかどうかを考えています:

SELECT  testXML.value('(/TEST/@name)[1]', 'varchar(100)') Name,
        testXML.value('(/TEST/@status)[1]', 'varchar(100)') StatusCol,
        Bar.Ctrl.value('(Control/@RequestDate)[1]', 'varchar(100)') RequestDate
INTO #dates
     -- Bar.Ctrl.query('max(data(Control/@RequestDate))').value('.', 'datetime')
FROM TestXML
CROSS APPLY testXML.nodes('/TEST/Bar') Bar(Ctrl)
WHERE testXML.value('(/TEST/@status)[1]', 'varchar(100)') = 'Completed'

SELECT Name, StatusCol, max(RequestDate) FROM #dates GROUP BY StatusCol, Name
于 2011-12-01T06:57:57.863 に答える