存储过程中不存储哪些内容?
答案 0 :(得分:9)
这不是关于是否使用存储过程的问题。这是一个假设的面试问题。面试官希望您确信您了解SP不是代码和数据的倾销场所,这些代码和数据更适合系统中的其他位置。
合理的答案可能包括以下内容:
对于这样的面试问题,目标不是确定一个真正正确或不正确的反应。相反,面试官心中有他的理想的回答,你的工作就是确定回应。如果你的面试官是一名DBA,管理一个DBA小组,或者看起来强烈要求他们使用以DB为中心的方法,那么你可能希望淡化SP语言的弱点,并跳过建议以避免复杂的业务逻辑。数据库。这些辩论有时间和地点,但不是在你的面试中!
答案 1 :(得分:3)
我认为这是另一种情况,答案是:“它取决于”。首先,要回答的真正问题可能是:“我计划/愿意转移到数据库的业务逻辑是多少?”。
这是因为您可以在存储过程(sprocs)中实际拥有数据库中的所有业务逻辑,其中您的sprocs通常与应用程序的UI或API具有紧密的一对一映射。在这种情况下,您可能会使用LoginUser
,ValidateSession
,CommitPurchase
等名称的sprocs。
另一方面,您可以让您的sprocs充当瘦数据访问/操作层,其中真正的业务逻辑位于应用程序框架中的其他位置,而sprocs只是一组美化{{3}运营商。在这种情况下,您的sproc名称可能看起来更像GetListOfUsers
,GetTop100Users
,InsertUser
等。
这两种方法有各种优点和缺点,一种方法或另一种方法的可行性在很大程度上取决于具体情况。以下是关于此主题的一些相关Stack Overflow帖子:
现在关于您的实际问题,如果您的业务逻辑将位于数据库中,那么存储过程中可能不存在(或不存在)任何内容。另一方面,对于类似CRUD的sprocs,我认为除非确保数据正确和一致所必需的,否则它们应该没有任何内容。
答案 2 :(得分:2)
存储过程本身不存储数据。
答案 3 :(得分:1)
Select ^ From Table
修改强>
好的,这是一个温和的无聊和舌头检查答案。
存储过程中应该包含的内容:
我个人不会在存储过程中存储非常简单的查询,除非该查询被大量调用。例如,如果我在程序开始时调用数据库版本检查,并且我只在Select version from DataVersion
之类的语句中返回单点数据。这可能不是你应该从存储过程调用的东西。如果您有一个SP来简单地获取单个数据点,它会为代码添加一小部分模糊处理。这并不是说如果它是一个简单的查询,它不应该在存储过程中。
一次性查询,在存储过程中几乎没用。你为什么要存储你只会使用一次的东西。
非常动态的查询在存储过程中无法正常工作。我花了很多时间查看复杂的存储过程,如果它们被移入程序本身,可以简化很多。现代语言支持更好的动态查询开发方式,这是非常正确的。
答案 4 :(得分:0)
存储过程“定义一次, 多次使用。“如果有任何变化 必要的,(唯一的) 存储过程的定义 必须更换。动态SQL, 当然,允许任何SQL查询 随时发布。任何改变 存储过程立即影响 所有其他软件,报告, 等(DBMS内部或外部) 直接或间接指的是 它。它并不总是可能的 确切地确定究竟是什么 这些影响将是,也不是 可以安全地进行更改 对其他事情造成不利影响。