有一个表,表中的字段是这样的
uli_UserKey   uli_UserCode  uli_StartDate  uli_EndDate现在呢,我想写一个存储过程条件是这样的,如果uli_EndDate 小于当前日期的话就把它删掉,返回它成功的条数,和错误的条数;
还要获得删除了的uli_UserKey 根据这个去调用执行另外一个存储过程
浪费大家一点时间,帮我看下怎么弄呀?

解决方案 »

  1.   

    Create P_DeleteOldData
    AS
    /*
    如果uli_EndDate 小于当前日期的话就把它删掉
    获得删除了的uli_UserKey 
    */
    select uli_UserKey into #Temp from Talbe1 where datediff(day,uli_EndDate,getdate())>0delete from Talbe1 where datediff(day,uli_EndDate,getdate())>0select * from #Tempdrop table #Temp
    Go成功的条数和错误的条数是什么逻辑?加两个返回参数,也很简单。
      

  2.   

    还有就是获得uli_UserKey后还要调用另外一个存储过程,这里怎么写啊
      

  3.   

    调用另外一个存储过程建议不要写在同一个存储过程里,因为你要使用到游标去循环记录集。在应用程序中使用P_DeleteOldData后获得删除了的uli_UserKey后,再去调用另外一个存储过程。
      

  4.   

    那你就在drop table #Temp前加个游标取循环 #Temp啊,
    其中调用其他存储过程语句为 exec  'P_CallAnotherPro [参数]'
      

  5.   

    delete from Talbe1 where datediff(day,uli_EndDate,getdate())>0怎么会有失败的次数?除非是你数据库出现了异常吧。
      

  6.   

    你如果要精确控制,不能在SQL里做了,在应用程序中去循环,选出要删除的数据,一次删一个,根据删除时抛出异常去纪录错误条数。个人觉得这个实在没必要。