我正在使用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)”值 - 完全按照预期 –