先举出两种形式的存储过程——
形式一:
 create proc 过程名
{@变量名1,
@变量名2,
@变量名3,
……
}
as
select(或 update 或 delete 或 insert)执行语句,字段名和变量名均指定具体对应关系。形式二:
create proc 过程名
{@变量名1,
@变量名2,
@变量名3,
……
}
as
declare @条件赋值变量1
declare @条件赋值变量2
declare @条件赋值变量3
……
declare @SQL语句if @变量名1=某某值
  begin
    set @条件赋值变量1=按条件赋值
    set @条件赋值变量2=按条件赋值
    set @条件赋值变量3=按条件赋值
  end
else
  begin
    set @条件赋值变量1=按条件赋值
    set @条件赋值变量2=按条件赋值
    set @条件赋值变量3=按条件赋值
  end
if @变量名2=某某值
  ……
if @变量名3=某某值
  ……
set @SQL语句=经过条件判断和逻辑处理后的动态语句
exec(@SQL语句)第一种形式,数据库服务器直接执行SQL命令;第二种形式,数据库服务器需要判断外部传入的参数值,根据不同参数值来组织SQL命令语句。
可见,第一种执行效率高,但缺点是不灵活,非常繁琐,一个小型网站都用这种形式的话,要创建上百个甚至几百个存储过程,可想而知维护工作量是多么吓人。
第二种非常灵活,可以建立通用存储过程,一个网站都用这种形式的话,创建的过程数量一定不会很多,维护当然轻松省事,但缺点是不能直接执行,需要运算处理,需经过判断、赋值、组织SQL命令语句,执行效率自然比第一种低。
OK,我的描述到此打住,呵呵……问两个问题——
1、调查一下朋友们,你们主要是用第一种形式还是第二种形式?什么情况用第一种,什么情况用第二种?
2、探讨一个问题,都说动态SQL语句执行效率低,但第二种形式实质上也是动态SQL语句,与不用存储过程的区别只有一点,那就是只需要接收一些参数而非整个SQL字符串,不用存储过程嘛,当然得传送完整的SQL字符串了。我个人是这样想的,如果都用第二种形式的存储过程,那还不如不用,直接在网站程序中写SQL语句就行了,不知大家有什么高见?各位大侠,有什么经验分享一下吧,谈谈看法哦,3Q,谢谢啦!

解决方案 »

  1.   

    第二种形势,估计 开发起来比较 难,能不能举个具体的例子,第二种的,我从来没用过我现在用linq to sql  做访问
      

  2.   

    第二种也远比你在程序中写SQL语句快的多。
      

  3.   

    用第一种,建实体类,在DAL中执行SQL语句,存储过程就用的少了。还可使用
    LINQ TO sql 执行动态语句