sql >> データベース >  >> RDS >> Sqlserver

xquery を使用して xml からデータを抽出する最良の方法

    少し汚い解決策を見つけました:

    select ISNULL(Age1, case when Num>= 1 then 18 else -1 end) Age1
        , ISNULL(Age2, case when Num>= 2 then 18 else -1 end) Age2
        , ISNULL(Age3, case when Num>= 3 then 18 else -1 end) Age3
        , ISNULL(Age4, case when Num>= 4 then 18 else -1 end) Age4
    from (
        select Persons.Person.value('@num','smallint') as Num
              ,Persons.Person.value('xs:integer(fn:number(@num))+1','int') as Num1
              ,Persons.Person.value('Person[@age<18][xs:integer(fn:number(../@num))][1]/@age','smallint') as Age1
              ,Persons.Person.value('Person[@age<18][xs:integer(fn:number(../@num))-1][1]/@age','smallint') as Age2
              ,Persons.Person.value('Person[@age<18][xs:integer(fn:number(../@num))-2][1]/@age','smallint') as Age3
              ,Persons.Person.value('Person[@age<18][xs:integer(fn:number(../@num))-3][1]/@age','smallint') as Age4 
        from @XmlData.nodes('/Persons') Persons(Person)
     ) Persons
    

    解決策のアイデアは、最初に>=18 の連絡先を抽出し、次に 0

    UPD:ソリューションが正しい結果を提供したという事実にもかかわらず、そのコストは高いです:推定実行計画で ~1000



    1. IDをモーダルボックスに渡してユーザーにメッセージを送信する

    2. Javaプログラムのraise_application_errorからの文字列を表示します

    3. 警告:mysql_query()は、パラメーター2がリソースであると想定しています。ブール値はC:\ wamp \ www \ pyrll\emlhome.phpの15行目にあります。

    4. PDO sqlsrv:ドライバーが見つかりませんでした