输入:

客户声称应用程序 (.NET) 在查询某些数据时返回的数据与客户直接查看数据表时返回的数据不同。

我知道可能有各种原因并且在完全不同的地方。我的目的不是在这里解决它,而是询问有经验的 DBA 和 DB 开发人员是否:

VIEW 是否可以显示与基础 TABLE 不匹配的数据?

  • 可能的原因/原因是什么?
  • View 上的 UPDATE 语句能否导致 future 的 SELECT 返回“更新”数据,而表确实没有?

  • 可能的原因(请评论带问号的):
  • 原因是有两个独立的交易,这可以解释客户的困惑。
  • 基础表已更改,但 View 未刷新(使用 sp_refreshview)
  • 不同的用户正在连接并且由于权限可以看到不同的数据?
  • 程序员错误:错误的表/列,错误的过滤器(此处多合一)
  • 损坏发生:DBCC CHECKDB 应该帮助
  • 可以 SELECT ... FOR UPDATE 导致这个 ???
  • ? __

  • 到底发生了什么(答案):

    某些表中的列位置发生了变化:显然,客户向顾问提供了完整的数据库访问权限,以进行数据库使用情况分析。当使用 SELECT * ... 子句时,那个伟大的家伙改变了列的顺序以查看表开头的几个审计字段。

    使用 dbGhost 将数据库架构与问题出现前几天备份的架构进行比较,发现列位置差异。

    接下来的事情与编程无关,更多的是政治问题。

    因此 sp_refreshview 是解决方案。我只是多走了一步,找到了问题的根源。谢谢你们。

    最佳答案

    是的,有点。
    可能的原因:

  • View需要刷新或重新编译。当源列定义更改并且 View (或它所依赖的东西)使用“*”时会发生这种情况,这可能会令人讨厌。调用 sp_RefreshView。也可能由于它调用的 View 或函数(数据源)而发生。
  • View 正在查看与他们/您的想法不同的东西。他们正在查看错误的表或 View 。
  • View 正在以一种意想不到的方式转换数据。它工作正常,只是不像他们预期的那样。
  • View 返回的数据子集与预期不同。同样,它工作正常,只是不像他们想的那样。
  • 他们正在查看错误的数据库/服务器或登录/用户身份导致 View 更改其显示的内容。特别邪恶,因为与 Management Studio 不同,大多数客户端程序不会告诉您它们指向的是哪个数据库/服务器。
  • 关于sql - 数据库VIEW不反射(reflect)底层TABLE中的数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1013711/

    10-13 08:42
    查看更多