Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 存储过程的模式?_Sql_Database_Tsql_Stored Procedures - Fatal编程技术网

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过程以及

是否有写入存储过程的模式?比如:

  • 我们是否应该为每个表编写1个Sp用于更新,1个Sp用于插入,1个Sp用于选择
  • 什么时候可以创建视图
  • 如何在SP中管理业务规则
  • 如何减少重复代码等
  • 任何关于这些模式的好文章或好书


    感谢通常,存储过程遵循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。