每个表或根据需要创建三个存储过程(选择/更新/插入)?

时间:2009-12-01 19:13:38

标签: asp.net stored-procedures ado.net

使用asp.net,sql server 2008,winserver2003

我们有大约10个表,每个表大约有20个字段......

我们有大约30个网络表单,其中每个表单使用来自某些/所有表格的某些字段......

每个表单都有自己的数据集,具体取决于它使用的表。但是,要创建该数据集,将在每个使用的表上调用Select *存储过程。数据集通过表单/代码进行更新,每个数据表调用一个通用的Insert或Update存储过程,将每个字段作为参数传递。虽然膨胀,但每个表只存在3个存储过程,所有表单都使用这些存储过程,相当于30个存储过程。

是否首选仅使用表单所需的字段为每个表单创建自定义选择/更新/插入存储过程...因此共计90个存储过程? 随着形式的增加,这个数字会增加......

4 个答案:

答案 0 :(得分:1)

存储过程是否具有任何特殊功能,还是只运行“SELECT * FROM table”等基本硬编码语句?

如果他们只运行基本语句,那么最好摆脱存储过程并使用动态SQL。这将减少您必须执行的维护工作量。动态SQL的旧性能问题已不再适用,因为SQL Server的缓存和编译系统现在要好得多。安全问题也已过时,因为您现在可以在动态查询中使用参数化。

答案 1 :(得分:1)

您应该重新考虑在UI和数据库之间如此紧密地实施商业逻辑概念。您和您的团队应该退后一步,分析您的系统需要哪些类型的业务对象,而不是映射到大量的屏幕。你可以为每个商业对象提供CRUD SP,但很多你的显示内容应该由一些视图处理(除非你的模型完全是zany。)

答案 2 :(得分:1)

如果您确实需要SP(安全性?),那么您至少应该考虑使用Merge。使用Merge,您将获得内置的upsert命令。

“Upsert,what?”:

update myTable set Col1=@col1, Col2=@col2 where ID=@ID
if @@rowcount = 0
insert into myTable (Col1, Col2) values (@col1, @col2)

答案 3 :(得分:0)

是否真的需要为此使用SP,或者您是否可以使用paramterized查询。这样可以避免SP的增长,并且会减少服务器对每个表单不需要的字段的流量。

使用专门的查询来执行select,insert和update语句,而不是通用SP来从多个表单执行这些操作。