初涉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.   

    1.用cmd.CommandText=storedProcName;
    2.如果SET NOCOUNT ON 
    那么ExecuteNonQuery没有返回值,而如果没有,则执行成功,会返回影响人纪录数..
      

  2.   

    1.我没见人这样用过,但是我想当然是可以实现效果的 但是貌似有些怪异
    2. 如果SET NOCOUNT ON 那么ExecuteNonQuery没有返回值,
    而如果没有,则执行成功,会返回影响的记录数..
      

  3.   

    貌似1是ASP的执行方式.问题2是设置是否返回受影响行数的.
    当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。
    当 SET NOCOUNT 为 OFF 时,返回计数。 
      

  4.   

    sqlhelper
    建议使用
    开源的
    微软官方开发的
    很出名的