Database VIEW不反映底层TABLE中的数据

van*_*van 9 sql sql-server schema

输入:

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

我知道可能有各种各样的原因并且在完全不同的地方.我的目的不是在这里解决它,而是要求经验丰富的DBA和DB开发人员:

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

  • 可能的原因/原因是什么?
  • 当表真的没有时,视图上的UPDATE语句是否会导致将来的SELECT返回'更新'数据?

可能的原因(请对带有问号的人发表评论):

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

真正发生的事(答案):

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

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

接下来发生的事情与编程无关,但更多的是政治问题.

因此,这sp_refreshview是解决方案.我只是更进一步找到导致问题的原因.谢谢你们.

RBa*_*ung 21

是的,有点.

可能的原因:

  1. View需要刷新或重新编译.当源列定义发生变化并且View(或它依赖的东西)使用"*"时会发生,可能会令人讨厌.调用sp_RefreshView.也可能因为它调用的视图或函数(数据源)也会发生.

  2. View正在寻找与他们/您的想法不同的东西.他们正在查看错误的表格或视图.

  3. View正以意想不到的方式转换数据.它运作正常,就像他们预期的那样.

  4. View返回的数据子集不同于预期.再一次,它的工作正常,就像他们想的那样.

  5. 他们正在查看错误的数据库或使用登录/用户身份导致View更改其显示的内容.

  • 大声笑,不能告诉你我们有多少错误,有人在寻找有关质量保证的信息,而这些信息只是在生产中. (4认同)
  • 嘿.是的,我有很多很长的(虽然有利可图)一天通过类似案件走向客户.有一段时间,直接问不起作用:"你确定你在Prod吗?是的." + 2小时:"你确定*?是的." + 3小时:"所以你确定?......"(愤怒随之而来).所以现在我用"你在查询窗口状态栏左边第3个单元格中说了什么?"这样的问题来掩饰它?QA?这是你的QA数据库吗?(更不用说愤怒了......) (3认同)

SQL*_*ace 10

如果基础表已更改并且尚未针对视图运行sp_refreshview,则可能会出现缺少列的情况(如果已将这些列添加到表中).

要了解我的意思,请阅读如何使用sp_refreshview确保视图将使基础表发生更改