sql 游标的存储过程的使用

CREATE PROCEDURE App_Demo_zspExecuteHousingbyDemolitionId222222
(
  @pi_Action VARCHAR(100),
  @pi_HousingId1 varchar(50),
     @pi_HousingId2 varchar(50),
  @pi_HousingId3 varchar(50),
     @pi_DemolitionId varchar(50), 
     @po_Status int output,
     @po_RetValue varchar(200) output
)
AS
declare @pt_HousingId varchar(100)
 IF @pi_Action = 'modify'
 BEGIN        

--临时表的定义
declare @pt_tbHousing table(HousingId varchar(100))
insert into @pt_tbHousing
(
HousingId
)
select HousingId from Demo_HousingInfo where DemolitionId=@pi_DemolitionId
--定义游标

 DECLARE curTmpHousingCursor SCROLL CURSOR FOR
   (
     SELECT
     HousingId
     FROM @pt_tbHousing
   )
   OPEN curTmpHousingCursor
   IF @@CURSOR_ROWS > 0
   BEGIN
    BEGIN TRANSACTION
   
    FETCH NEXT FROM  curTmpHousingCursor INTO
    @pt_HousingId
 
    WHILE @@FETCH_STATUS = 0
    BEGIN
     update Demo_HousingInfo set DemolitionId='' where HousingId=@pt_HousingId
     FETCH NEXT FROM  curTmpHousingCursor INTO
    @pt_HousingId    
    END
   END  
  CLOSE curTmpHousingCursor
  DEALLOCATE curTmpHousingCursor
  END
update Demo_HousingInfo set
         DemolitionId=@pi_DemolitionId
         where HousingId=@pi_HousingId1
update Demo_HousingInfo set
         DemolitionId=@pi_DemolitionId
         where HousingId=@pi_HousingId2
update Demo_HousingInfo set
         DemolitionId=@pi_DemolitionId
         where HousingId=@pi_HousingId3 
if @@error <> 0
begin
rollback tran
 set @po_status = 900
 set @po_RetValue = '数据执行失败'
end
 else
begin
commit tran
       set @po_status = 103
       set @po_RetValue='选房成功'
end

posted @ 2012-05-04 17:43  浅谈生活  阅读(233)  评论(0编辑  收藏  举报