2017-04-18 4 views
1

SQL Server 2008を使用しており、比較的新しいSQLです。解析されたxmlデータから値を持つ新しい列を作成します

データ型がxmlの列を含むテーブルがあります。この列のXMLは、顧客のレシートのためのレストラン情報が含まれています

<order> 
    <Check> 
     <CheckHeader> 
      <CheckNumber>279084</CheckNumber> 
      <ServerNumber>186</ServerNumber> 
      <ServerName>ServerName</ServerName> 
      <CheckTotal>8.95</CheckTotal> 
     </CheckHeader> 
    </Check> 

はここにいくつかの研究を行った後、私は<CheckTotal>つまり、私が気になる情報を解析する方法を学びました:

SELECT 
    order_xml.value('(/order//CheckTotal/node())[1]', 'nvarchar(max)') as CheckTotal 
FROM 
    CheckTable 

IこのCheckTableテーブル内の新しい列にこのように解析されたCheckTotalの値を追加するにはどうすればいいですか(もちろん、CheckTotalが適切な行と一致することを確認してください)。

マイCheckTable表は次のようになります。

CheckTable Image

私はすでに何をしましたか?

私は新しい列を追加するためにテーブルを変更しました。の値と解析されたCheckNumberの値を追加した@temptTbを作成しようとしました。私はCheckNumberの値を解析して、新しいカラムを更新するためにこれらの2つのテーブルを結合するときに、に基づいてCheckNumberに基づいて一致させることを保証しようとしています...もちろん、データセットCheckNumberは再利用され、再利用されます。

このような解決策が存在することを願っておりますが、CheckTableテーブルの新しい列に、すぐに解析されたxml CheckTotalの値を直接追加できます。

答えて

0

あなたのXMLが唯一のこれまでの内部 <Check>1つの順序が含まれている場合 - あなたはこのような何かを試みることができる:あなたのXMLは、任意のレベルで複数の要素が含まれている場合、それは少しトリッキー取得

UPDATE dbo.CheckTable 
SET CheckTotal = CheckXml.value('(/order[1]/Check[1]/CheckHeader[1]/CheckTotal[1])', 'decimal(18,2)') 

を要素階層...

+0

それは本当にうまくいった!好奇心の外に - CheckXml.Value関数内で、 'decimal(18,2)'は何をするのですか? –

+0

@BrianP: '' XML要素に含まれる値をその特定のデータ型に変換します。 '.value()'の呼び出しが実際に 'decimal(18,2)'の値を返します。 –

関連する問題