存储过程与 查看

Vis*_*hal 63 sql comparison stored-procedures views sql-server-2008

我已经使用了两者,但我不清楚的是我何时应该更喜欢一个而不是另一个.我的意思是我知道存储过程可以接受参数......但是我们仍然能够使用Views执行相同的操作吗?

因此,考虑到性能和其他方面何时以及为什么我更喜欢一个而不是另一个?

gbn*_*gbn 35

好吧,我会使用存储过程来更好地封装代码和控制权限.

视图不是真正的封装:它是一个扩展的宏.如果您很快就开始加入视图,那么您将遇到一些可怕的问题.是的,他们可以加入,但他们不应该......

可以这么说,视图是一个有位置的工具(例如索引视图),就像存储过程一样.

  • @Freelancer:`SELECT * FROM View`,就像一张桌子 (2认同)

Mat*_*nen 19

视图的优点是它们可以像表一样对待.您可以使用WHERE从它们获取过滤数据,加入它们等等.如果它们足够简单,您甚至可以将数据插入到它们中.与存储过程不同,视图还允许您索引结果.

  • @gbn:如果放在坏人手中,任何事情都可能被滥用. (12认同)
  • @gbn:你所谈论的问题不是观点的错误,只是人们在不理解其含义的情况下使用观点的不幸副作用.不幸的是,我似乎经常看到滥用观点而不是正确使用它们. (4认同)
  • @gbn:为什么不......? (3认同)
  • 看到我的回答......?心态是"我们可以有一个视图,为我们做所有这些东西",然后查看连接视图连接视图=对基表的可怕查询.看过它,之前修好了好几次.并回答了关于它的问题http://stackoverflow.com/search?q=user%3A27535+macro%2Bview (3认同)
  • 这些反对VIEW的论据似乎很弱,并且依赖于广泛的概括或错误的查询规划器.看看硬币的另一面,批评认为使用存储过程替换VIEW是一个好主意,因为它*不能用于加入......这看起来相当疯狂. (2认同)

The*_*ing 14

View就像一个保存的查询语句,它不能包含复杂的逻辑或多个语句(超出了union等的使用).对于任何复杂或可通过参数自定义的内容,您可以选择存储过程,从而提供更大的灵

在数据库体系结构中使用视图和存储过程的组合是很常见的,并且可能由于非常不同的原因.有时,当重新设计模式时,可以在sprocs中实现向后兼容性,有时与数据在本地存储在表中的方式相比,可以使数据更易于操作(de-noramlized视图).

大量使用视图会降低性能,因为SQL Server更难以优化这些查询.但是,可以使用索引视图,它可以在以与索引表相同的方式使用联接时实际上增强性能.在实现索引视图时,对允许的语法有更严格的限制,并且根据SQL Server的版本实际使其工作有很多细微之处.

将Views视为比存储过程更像表.


Nas*_*sir 12

存储过程的主要优点是它们允许您合并逻辑(脚本).该逻辑可以像IF/ELSE一样简单,也可以更复杂,例如DO WHILE循环,SWITCH/CASE.


Sid*_*idC 5

我将存储过程的使用与发送/接收数据库之间的事务的需要联系起来.也就是说,每当我需要将数据发送到我的数据库时,我都使用存储过程.当我想更新数据或查询数据库以获取我的应用程序中使用的信息时,情况也是如此.

当您想要提供给定表中的字段子集时,可以使用数据库视图,允许MS Access用户查看数据而无需修改数据,并确保报告将生成反复数据结果.

  • 首先,您不应该拥有MS Access用户.其次,适当的安全性和权限应该阻止他们修改数据.不是观点. (4认同)