收录日期:2020/10/28 12:52:56 时间:2016/07/16 15:33:50 标签:C#
先举出两种形式的存储过程——
形式一:
 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,谢谢啦!
第二种形势,估计 开发起来比较 难,能不能举个具体的例子,第二种的,我从来没用过

我现在用linq to sql  做访问
用第一种吧。
第二种也远比你在程序中写SQL语句快的多。
用第一种,建实体类,在DAL中执行SQL语句,存储过程就用的少了。还可使用
LINQ TO sql 执行动态语句
第二个动态的好像复杂了,
第二个动态的好像复杂了,

求嵌入网页的html编辑器 想问一下,pb65的程序能不能在win ce上面运行? 我的MM学历很低,只有专科,现在在自考本科,很上进,我很喜欢,不过我家里觉得他学历太低了,郁闷! 如何把变量写到cookie里,供我其它页面调用? 求救:实现插件功能时,遇到的一个问题 如何在用户控件中取得url中的值 如何取得外网IP 哪有 英文版visual studio.net2003 下载? php客户端调用.net的Web Service -----怎样实现 HTML里的视频播放,在首次出现的默认画面中,出现自己做的图片 续:“在这里能找到女友吗?想试试看!” 遇到一个变态的问题,大家帮我看看哦 急:HTTP 500 - 内部服务器错误 请问怎样才可以输入繁体字??? gdi+现在是否能够完全替代gdi? 哪位有 凸壳理论 的资料,或者知道那本书上有关于 凸壳理论 的类容请回复一下!! 关于conform()方法中的中英问题? 请教Cookie 丢失问题 如何把一个表中的几个字段的值插入到另一个表中? cmos找不到硬盘 为什么多出来一行\"回车\"~~?? 如何将读入的TXT文件,转到EXCELL里面啊?? 一个有关\"返回\"的问题 等她等了三年!最后晚节不保!我跟另外一个女孩好上了。下班了,散完最后的分 【转载】中国城市批判 下周就开始做毕业设计了.兴奋、害怕....我也不知道? 请问下异步Socket的多线程流程是怎么走的? 这条SQL如何写 关于dynamic_cast的c++问题,希望大家帮帮忙,谢谢 如何判断数据库中datetime型字段的值是否为空,急