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

标签 sql xml xpath

我有一个用户个人资料(基于用户类型有多个个人资料),我将其存储在数据库列(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/

相关文章:

java - Spring 多属性占位符和 SPEL 顺序无关

c# - 列表的 XML 序列化变得太大

mysql - 排序结果表格 Mysql group by

mysql - 如何在mysql中处理很长的SQL INSERT语句

sql - 如何处理SQL查询中的可选参数?

xml - 在 Scala 中递归调用 try

php - 使用 DOMDocument PHP 获取 Xpath 父节点?

c# - 根据Condition读取多个节点

python - 将从浏览器获取的 XPath 转换为 Scrapy 可用的 XPath

mysql - PostgreSQL、MonetDB 和 MySQL 向现有表添加外键