【问题标题】:How to know how many times a record has been viewed (SELECTED)?如何知道一条记录被查看了多少次(SELECTED)?
【发布时间】:2015-09-28 04:55:55
【问题描述】:

我想实现一个功能,该功能将向用户显示一条记录被查看了多少次(已选择 SQL),但不知道最好的方法是什么。 我现在能想到的唯一方法是获取已选择的所有记录 ID,然后使用 xml 批量更新来更新视图计数。有没有更好的方法或表格设计来进行视图计数?谢谢!

---------------
| recordID    |
| recordValue |
| viewCount   |         
---------------

【问题讨论】:

  • 我设想某种视图、触发器和/或存储过程的组合。也就是说,除非您尝试进行某种代码检测,否则“视图数量”通常是 业务领域的一部分; 也就是说,您不一定想知道有多少访问表记录的次数,而是访问发票(或其他业务对象)的次数,以及访问者。
  • 感谢您的回答,但目标是了解表记录被访问了多少次,我想知道是否有更好的表设计来做到这一点?
  • 更好的... 桌子设计?不,桌子就是桌子。你需要别的东西。

标签: sql sql-server


【解决方案1】:

我认为这种级别的审核是不可能的。但是,您可以使用以下查询获取过去 24 小时内的命令列表。也许您可以通过添加一些良好的字符串解析功能定期运行它。

SELECT 
    QueryDate=execquery.last_execution_time,
    SQLString=execsql.text,
    QueryCount=execution_count
FROM 
    sys.dm_exec_query_stats AS execquery
    CROSS APPLY sys.dm_exec_sql_text(execquery.sql_handle) AS execsql
ORDER BY 
    execquery.last_execution_time DESC

【讨论】:

  • 如果可能的话,必须通过要求用户通过某种机制(如存储过程或视图)访问表来完成,也许与某种触发器相一致。然后,您可以进行任何级别的审核。
  • 这是一个很好的观点。如果不需要审核临时查询,那么您描述的方式是合理的,而且,在我看来,这是应用程序访问数据的方式。这种方法的唯一问题是每个新的报告存储过程和/或创建的视图都会带来包袱。
  • 谢谢!我会试试这个!
猜你喜欢
  • 1970-01-01
  • 2020-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多