[英]How to modify values while extracting them from XML data in SQL Server
这是有关SQL中的XQuerying(SQL Server 2008)的问题
最初,我有一个XML,需要将它输出一些不同的内容,以供参考:
declare @XMLNODE table (id int identity, doc xml)
insert @XMLNODE (doc) values (
'
<Root>
<Elements>
<Items>
<OldItem>
<ID>1</ID>
<Show Pointer="yes" />
<Display Pointer="Display">
<Detail1>some Details</Detail1>
</DisplayDetails>
</OldItem>
</Items>
</Elements>
</Root>'
)
SELECT a.value('(ID)[1]','int') as ID,
a.value('(Show/@Pointer)[1]', 'varchar(5)') AS ShowItem,
a.value('Display[1]/@Pointer[1]="Display"', 'varchar(10)') as DisplayDetails, -- Set to 'true' or 'false'
a.value('DisplayDetails[1][@Pointer[1]="Display"]/Detail1[1]', 'varchar(max)') as Detail1
FROM @XMLNODE t
cross apply
t.doc.nodes('//OldItem') x(a)
FOR XML PATH ('Items'),
ROOT('Elements')
所以,现在我有了这样的XML:
<Elements>
<Items>
<ID>1</ID>
<ShowItem>yes</ShowItem>
<DisplayDetails>true</DisplayDetails>
<Detail1>some Details</Detail1>
</Items>
</Elements>
想要添加一些修改,基于它是否为真/是等,将其修改为1或没有值。
即期望:
<Elements>
<Items>
<ID>1</ID>
<ShowItem>1</ShowItem>
<DisplayDetails>1</DisplayDetails>
<Detail1>some Details</Detail1>
</Items>
</Elements>
另外,如果<DisplayDetails>false</DisplayDetails>
我只想将其更新为<DisplayDetails />
。
有没有一种方法可以直接比较查询中的输入(例如,是或否)并将其设置为1或0而不是true或false? 我正在使用.query使用这些值并根据需要添加其他信息。
我不是非常从SQL查询XML,但是如果我要对不是XML的任何东西执行此操作,则可以在SELECT语句中执行以下操作:
SELECT a.value('(ID)[1]','int') as ID,
case
when a.value('(Show/@Pointer)[1]', 'varchar(5)') = 'yes' then '1'
else '0'
End case as 'ShowItem',
a.value('Display[1]/@Pointer[1]="Display"', 'varchar(10)') as DisplayDetails, -- Set to 'true' or 'false'
a.value('DisplayDetails[1][@Pointer[1]="Display"]/Detail1[1]', 'varchar(max)') as Detail1
FROM @XMLNODE t
cross apply
t.doc.nodes('//OldItem') x(a)
注意:这尚未尝试过,并且我不在数据库客户端上以确保我的语法完全正确。 但是,从数据库中检查一个值并根据该值显示其他内容是相对简单的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.