gpt4 book ai didi

sql - SQL 2005中带有XML列的ORDER BY语法

转载 作者:行者123 更新时间:2023-12-03 16:56:06 27 4
gpt4 key购买 nike

我有一个用户个人资料(基于用户类型有多个个人资料),我将其存储在数据库列(xml)中。

我可以在存储过程中使用XPATH对此进行查询,但是不确定如何执行ORDER BY。

SELECT U.UserId, UP.Profile, UP.UserParentID
FROM aspnet_Users U
LEFT OUTER JOIN UserProperties UP ON U.UserId = UP.UserId
WHERE
UP.Profile.exist('/Properties/property[contains(.,sql:variable("@cLookup"))]') = 1


XML示例:

<Properties>
<property id="BusinessName" name="Business Name"></property>
<property id="AccountNumber" name="Account Number"></property>
<property id="Address" name="Address"></property>
<property id="Phone" name="Phone"></property>
<property id="Fax" name="Fax"></property>
<property id="Web" name="Web"></property>
<property id="ABN" name="ABN"></property>
<property id="Logo" name="Logo"></property>
<property id="Photos" name="Photos"></property>
<property id="Map" name="Location Map"></property>
</Properties>




<Properties>
<property id="FirstName" name="First Name"></property>
<property id="LastName" name="Last Name"></property>
</Properties>


想要按BusinessName订购

最佳答案

将此答案视为一项正在进行的工作,因为我不确定这是否是正确的查询。

答案在于将.nodes()函数与.value()组合使用,因此您可以使用“ BusinessName”作为“ id”属性的值从元素中提取“ name”属性的值。

关于使用.nodes()替换旧的OPENXML语法here有一些指南。

无论如何,这就是它所代表的查询。在您的数据上尝试一下,看看是否可以对其进行调整,直到它起作用为止。

SELECT U.UserId, UP.Profile, UP.UserParentID
FROM aspnet_Users U
LEFT OUTER JOIN UserProperties UP ON U.UserId = UP.UserId
OUTER APPLY UP.Profile.nodes('/Properties/property') p(prof)

WHERE UP.Profile.exist('/Properties/property[contains(.,sql:variable("@cLookup"))]') = 1
AND p.prof.value('@id', 'nvarchar(20)') = 'BusinessName'

ORDER BY p.prof.value('@name', 'nvarchar(100)')

关于sql - SQL 2005中带有XML列的ORDER BY语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/471586/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com