pymssql:当列具有 XML 值时如何获取不同的行

pymssql : How to get distinct rows when a column has XML values

我正在尝试在具有 XML 值的 table 的查询中使用 distinct。这是我的查询

select distinct pID,docXml from docTable where docXml is not null and pID not like '%xyz%'

但我明白了

pymssql.OperationalError: (421, 'The xml data type cannot be selected as DISTINCT because it is not comparable.DB-Lib error message 20018, severity 16:\nGeneral SQL Server error: Check messages from the SQL Server\n')

如何解决这个问题?这是什么意思?

docXml 列中的数据看起来像

<document>
    <pages>

    <page>   
       <paragraph>XBV</paragraph>

       <paragraph>GFH</paragraph>
    </page>

    <page>
       <paragraph>ash</paragraph>

       <paragraph>lplp</paragraph>
    </page>

    </pages>
</document>

请注意,如果我不使用 distinct,那么我可以轻松获取所有数据。但由于有重复项,我只对唯一行感兴趣。

你可以试试

CONVERT(NVARCHAR(MAX), docXml) 

在 select 语句中(也许将整个内容放在 CTE 中,然后将其从 CTE 转换回 XML)例如

; WITH T AS (select distinct pID,CONVERT(NVARCHAR(MAX), docXml) docXml from docTable where docXml is not null and pID not like '%xyz%')
SELECT pID, CONVERT(XML, docXml) FROM T

或者,如果您的 pID 本身是不同的(这样每个 pID 都与一个 docXml 相关),您可以在其 XML 格式。例如

; WITH T AS (select pID
    ,docXml
    ,ROW_NUMBER() OVER (PARTITION BY pID ORDER BY pID) RN
    from docTable 
    where docXml is not null 
    and pID not like '%xyz%')
SELECT pID, docXml FROM T WHERE RN = 1

编辑:至于为什么要这样做,SQL 不喜欢对 CLOB 进行排序