SQL的存储过程的使用
初涉SQL的存储过程,感觉用起来有点不安,在这边想多请教各位高手
下面是我定义的一个存储过程,通过用户编号的参数@PersonCode 来更新该用户的积分
CREATE PROCEDURE X3_updatePoint
@PersonCode varchar(40)
AS
select
sPersonCode,
sum(case bState when 1 then lPoint when 0 then -lPoint else 0 end) as totalPoint,
sum(case bState when 1 then lPoint else 0 end) as addPoints,
sum(case bState when 0 then lPoint else 0 end) as DecPoint
into #dd from X3_points where sPersonCode = @PersonCode group by sPersonCode
update X3_PointStat set
lTotalPoint=a.totalPoint,
lAddPoint=a.addPoints,
lDecPoint = a.DecPoint
from #dd a inner join X3_PointStat b on a.sPersoncode = b.sPersonCode where b.sPersonCode = @PersonCode
drop table #dd
GO
在.NET中调用存存储过程本来有个专门的方法,就是通过cmd.CommandText=storedProcName;声明存储过程。。。
但我觉得那样很麻烦,于是呼我就直接执行如下SQL语句也是可以实现效果的:
EXECUTE X3_updatePoint '34567'
1、现在就是不知道这样调用存储过程好不好,用什么方式调用存储过程效率会比较快呢?
2、还有一点,就是看到别人的存储过程里常有下面这个东东,用来干嘛的?我那种定义存储过程的方法不会有问题吧?
--关闭计数器
SET NOCOUNT ON
--打开计数器
SET NOCOUNT OFF
初次用这个存储过程,很多安全效率方面还不懂,
谨待赐教!
------解决方案--------------------1.用cmd.CommandText=storedProcName;
2.如果SET NOCOUNT ON
那么ExecuteNonQuery没有返回值,而如果没有,则执行成功,会返回影响人纪录数..
------解决方案--------------------1.我没见人这样用过,但是我想当然是可以实现效果的 但是貌似有些怪异
2. 如果SET NOCOUNT ON 那么ExecuteNonQuery没有返回值,
而如果没有,则执行成功,会返回影响的记录数..
------解决方案--------------------对于问题1 我很佩服搂主的想象力...
------解决方案--------------------貌似1是ASP的执行方式.
问题2是设置是否返回受影响行数的.
当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。
当 SET NOCOUNT 为 OFF 时,返回计数。
------解决方案--------------------sqlhelper
建议使用
开源的
微软官方开发的
很出名的