我正在使用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
我在哪裏我沒有掙扎是如何將這個解析的CheckTotal
值添加到此CheckTable
表中的新列(當然確保CheckTotal
與適當的行相匹配)。
我CheckTable
表看起來像這樣:
我有什麼已經做了?
那麼我改變了我的表添加一個新的列,我試圖創建一個@temptTb
我在那裏添加了解析CheckTable
值和解析CheckNumber
值。我解析了CheckNumber
的值,以確保當我加入這兩個表以嘗試更新新列時,我會匹配基於CheckNumber
的正確CheckTotal
......當然事實證明,對於我數據集CheckNumber
被回收並重新使用。
所以現在,我確信希望這樣的解決方案存在,我可以立即將我解析的xml CheckTotal
值直接添加到我的CheckTable
表中的新列中。
這真的很好!出於好奇 - 在CheckXml.Value函數中,'decimal(18,2)'是做什麼的? –
@BrianP:它將那個'' XML元素中包含的值轉換爲那個特定的數據類型 - 所以對'.value()'的返回值實際上是一個「十進制(18,2)」值 - 完全按照預期 –