You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询DNN(DotNetNuke)数据库找出近期实际修改的页面

解决DNN中识别实际编辑过的网页问题

我太懂你的困扰了——DNN里的LastModifiedOnDate字段真的很鸡肋,只要点了编辑按钮哪怕半毛钱内容没改,这个字段都会更新,靠它筛选出来的结果完全没法看。要找出真正有内容变更的页面,得从内容的实际差异入手,下面给你几个可行的思路:

1. 对比内容哈希值(推荐方案)

DNN的HtmlText表存储着页面的实际内容(比如Content字段),我们可以给内容生成哈希值,通过对比同一页面的哈希变化来判断是否真的修改过。

具体操作:

  • 如果权限允许,先给HtmlText表添加一个自动计算哈希的字段:

    ALTER TABLE HtmlText ADD ContentHash AS HASHBYTES('SHA2_256', Content) PERSISTED;
    

    这个字段会自动根据Content字段生成哈希,只要内容有变动,哈希值就会跟着变。

  • 然后用这个哈希值筛选出有实际内容变更的页面:

    WITH PageContentHistory AS (
        SELECT 
            TabID,
            ContentHash,
            LastModifiedOnDate,
            ROW_NUMBER() OVER (PARTITION BY TabID ORDER BY LastModifiedOnDate DESC) AS RowNum
        FROM HtmlText
        WHERE CreatedOnDate >= '2018-01-01'
    )
    SELECT 
        t.TabID,
        t.TabName,
        t.TabPath AS PageURL,
        p.LastModifiedOnDate AS ActualModifiedDate
    FROM PageContentHistory p
    JOIN Tabs t ON p.TabID = t.TabID
    WHERE p.RowNum = 1 -- 取页面的最新版本
    AND EXISTS (
        SELECT 1 
        FROM PageContentHistory p2
        WHERE p2.TabID = p.TabID
        AND p2.ContentHash != p.ContentHash
    )
    ORDER BY p.LastModifiedOnDate DESC;
    

    这个查询会找出那些至少有两个不同哈希版本的页面,也就是确实有内容变更的页面。

2. 直接对比内容版本(无需修改表结构)

如果没法改表结构,也可以直接对比同一页面的不同版本内容:

WITH PageContentVersions AS (
    SELECT 
        TabID,
        Content,
        LastModifiedOnDate,
        LAG(Content) OVER (PARTITION BY TabID ORDER BY LastModifiedOnDate) AS PreviousContent
    FROM HtmlText
    WHERE CreatedOnDate >= '2018-01-01'
)
SELECT DISTINCT
    t.TabID,
    t.TabName,
    t.TabPath AS PageURL,
    v.LastModifiedOnDate AS ActualModifiedDate
FROM PageContentVersions v
JOIN Tabs t ON v.TabID = t.TabID
WHERE v.Content != v.PreviousContent
AND v.PreviousContent IS NOT NULL -- 排除页面的初始版本
ORDER BY v.LastModifiedOnDate DESC;

这里用LAG函数获取上一个版本的内容,和当前版本对比,不一样的就是真正修改过的页面。

3. 结合编辑日志辅助过滤

DNN的EventLog表会记录系统操作日志,你可以结合这个表过滤那些只打开编辑但没保存的记录:

SELECT 
    t.TabID,
    t.TabName,
    t.TabPath AS PageURL,
    MAX(h.LastModifiedOnDate) AS ActualModifiedDate
FROM HtmlText h
JOIN Tabs t ON h.TabID = t.TabID
JOIN EventLog e ON h.TabID = e.ObjectKey
WHERE h.CreatedOnDate >= '2018-01-01'
AND e.EventTypeKey = 'CONTENT_EDITED' -- 只保留实际保存编辑的日志
GROUP BY t.TabID, t.TabName, t.TabPath
ORDER BY ActualModifiedDate DESC;

不过这个方法依赖DNN的日志配置,如果日志没开或者记录不全,结果可能不准,适合作为辅助手段。

小提醒:不同DNN版本的表结构可能略有差异,比如有些版本的内容表是HtmlContent而非HtmlText,你可以先确认自己的数据库表名再调整查询。

内容的提问来源于stack exchange,提问作者karlk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:25:37