Sql 存储过程的模式?
是否有写入存储过程的模式?比如:Sql 存储过程的模式?,sql,database,tsql,stored-procedures,Sql,Database,Tsql,Stored Procedures,是否有写入存储过程的模式?比如: 我们是否应该为每个表编写1个Sp用于更新,1个Sp用于插入,1个Sp用于选择 什么时候可以创建视图 如何在SP中管理业务规则 如何减少重复代码等 任何关于这些模式的好文章或好书 感谢通常,存储过程遵循CRUD()模式,但它们不必局限于此 1) 您可能希望将更新和插入结合起来。如果主键已填充,则它是更新,否则它是插入。对于GUID和其他客户端生成的键,您首先更新,如果行数为零,则需要执行插入。插入/更新过程通常返回主键 您需要一个get\u by\u id过程以及
感谢通常,存储过程遵循CRUD()模式,但它们不必局限于此 1) 您可能希望将更新和插入结合起来。如果主键已填充,则它是更新,否则它是插入。对于GUID和其他客户端生成的键,您首先更新,如果行数为零,则需要执行插入。插入/更新过程通常返回主键 您需要一个get\u by\u id过程以及一些get\u by\u非唯一条件,它们返回任意数量的行。这样做的目的是确保结果集中的列在所有get/list过程中都是相同的 这些过程的目标不一定是一个表,甚至不是一个视图,而是一个逻辑实体,因此您可能需要进行各种连接,包括关系和查找。返回多个结果集可能会有所帮助 2) 视图很方便,但与此无关。有时它们有助于重用,但并不总是如此 3) 这完全取决于商业规则。当然,您可以在存储过程级别防止某些类型的数据损坏,但它可以或应该知道的程度是有限的。话虽如此,在一些特殊情况下,您可能希望在过程中加入更多逻辑,例如登录 4) 您不能总是这样做,但有时您可以将公共代码分解成用户不调用的较低级别的stord进程
希望这是一个开始。读这篇:@HawX:不是直接的回答,但很有帮助。谢谢。存储过程是供应商锁定的重要来源,这可能是一个重要的考虑因素。供应商锁定?我认为,由于程序需要知道的只是名称和参数,它们允许避免供应商锁定。当您调用get_my_client_now(@id为整数)时,您不再关心它是Oracle还是SQL Server。