【发布时间】:2010-11-04 01:32:14
【问题描述】:
输入:
客户声称应用程序 (.NET) 在查询某些数据时返回的数据与客户直接查看数据表时不同。
我知道可能有各种原因,而且在完全不同的地方。我的目的不是在这里解决它,而是询问有经验的 DBA 和 DB 开发人员是否:
VIEW 是否可以显示与底层 TABLE(s) 不匹配的数据?
- 可能的原因/原因是什么?
- 视图上的 UPDATE 语句是否会导致未来的 SELECT 返回“更新的”数据,而表确实没有?
可能的原因(带问号的请评论):
- 原因是有两个独立的交易,这可以解释客户的困惑。
- 基础表已更改,但视图未刷新(使用 sp_refreshview)
- 不同的用户正在连接并且由于权限的原因可以看到不同的数据?
- 程序员错误:错误的表/列、错误的过滤器(此处为一体式)
- 发生损坏:DBCC CHECKDB 应该有帮助
-
SELECT ... FOR UPDATE会导致这个??? - ? __
真正发生的事情(答案):
某些表格中的列位置已更改:显然,客户将完整的数据库访问权限授予顾问以进行数据库使用分析。那位好人在使用SELECT * ... 子句时更改了列的顺序,以查看表开头的几个审计字段。
使用dbGhost 将数据库架构与问题出现前几天备份的架构进行比较,发现列位置差异。
接下来发生的与编程无关,更多的是政治问题。
因此,sp_refreshview 是解决方案。我只是多走了一步才能找到问题的根源。谢谢大家。
【问题讨论】:
-
感谢您的想法。明天将在现场 - 这次将更新问题。
-
Re #2:不是“更新”,而是“改变”。具体来说,列定义已更改(更改、添加、删除、重新排序等)。
-
@RBarryYoung:谢谢 - 已修复。
标签: sql sql-server schema