小编典典

数据库视图不反映基础表中的数据

sql

输入:

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

我了解可能有多种原因,并且在完全不同的地方。我的目的不是在这里解决问题,而是向经验丰富的DBA和DB开发人员询问是否:

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

  • 有哪些可能的原因/原因?
  • 如果表确实没有,视图上的UPDATE语句是否可以导致将来的SELECT返回“更新的”数据?

可能的原因(请对带有问号的问题进行评论):

  1. 原因是有两个单独的交易,这可以解释客户的困惑。
  2. 基础表已更改,但视图未刷新(使用sp_refreshview)
  3. 不同的用户正在连接,并且由于权限的原因可以看到不同的数据吗?
  4. 程序员错误:错误的表/列,错误的过滤器(此处为多合一)
  5. 发生损坏:DBCC CHECKDB应该提供帮助
  6. SELECT ... FOR UPDATE导致这个 ???
  7. ?__

真正发生了什么(答案):

在某些表中,列的位置已更改:显然,客户将完全的数据库访问权授予了顾问,以进行数据库使用情况分析。那个好人改变了列的顺序,以便在使用子句时在表的开头看到几个
审核 字段SELECT * ...

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

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

因此,这sp_refreshview是解决方案。我只走了一步,找出是谁造成了问题。谢谢你们。


阅读 184

收藏
2021-03-23

共1个答案

小编典典

是的,有点。

可能的原因:

  1. 该视图需要刷新或重新编译。当源列定义更改并且视图(或它所依赖的东西)使用“ *”时发生,可能会令人讨厌。调用sp_RefreshView。也可能由于它调用的视图或函数(数据源)而发生。

  2. 视图正在查看与他们/您的想法不同的事物。他们正在查看错误的表格或视图。

  3. 视图正在以一种意外的方式转换数据。它工作正常,只是不像他们预期的那样。

  4. 视图返回的数据子集与预期的不同。同样,它工作正常,只是不像他们想的那样。

  5. 他们正在查看错误的数据库/服务器或具有导致登录视图更改其显示内容的登录/用户身份。尤其邪恶,因为与Management Studio不同,大多数客户端程序不会告诉您所指向的数据库/服务器。

2021-03-23