相关疑难解决方法(0)

为什么使用'*'构建视图不好?

为什么使用'*'构建视图不好?

假设您有一个复杂的连接,并且可以在某处使用所有字段.

然后你只需要选择所需的字段.

SELECT field1, field2 FROM aview WHERE ...
Run Code Online (Sandbox Code Playgroud)

视图"aview"可能是 SELECT table1.*, table2.* ... FROM table1 INNER JOIN table2 ...

如果table1和table2中的2个字段具有相同的名称,则会出现问题.

这只是为什么在视图中使用'*'不好的原因?

使用'*',您可以在不同的上下文中使用该视图,因为信息就在那里.

我错过了什么?

问候

sql view

22
推荐指数
5
解决办法
7266
查看次数

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

输入:

客户声称,在查询某些数据时,应用程序(.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是解决方案.我只是更进一步找到导致问题的原因.谢谢你们.

sql sql-server schema

9
推荐指数
2
解决办法
2万
查看次数

标签 统计

sql ×2

schema ×1

sql-server ×1

view ×1