存储过程里循环读取Array



CREATE PROCEDURE dbo.s_Manager_UpdateManagerInCatalogID
(
 @catalogIDArray nvarchar(512),
 @managerID int,
 @Message nvarchar(64) out
)
AS

 DECLARE @PointerPrev int
     DECLARE @PointerCurr int
     DECLARE @TId int
     Set @PointerPrev=1
     set @PointerCurr=1

 begin transaction

 Set NoCount ON
 DELETE FROM Common_ManagerINCatalogs where ManagerID = @ManagerID--删除以前的记录
    
     Set @PointerCurr=CharIndex(',',@catalogIDArray,@PointerPrev+1)
     set @TId=cast(SUBSTRING(@catalogIDArray,@PointerPrev,@PointerCurr-@PointerPrev) as int)

     Insert into Common_ManagerINCatalogs (ManagerID,CatalogID) Values(@ManagerID,@TId)

     SET @PointerPrev = @PointerCurr
     while (@PointerPrev+1 < LEN(@catalogIDArray))
     Begin
         Set @PointerCurr=CharIndex(',',@catalogIDArray,@PointerPrev+1) --假设已“,”分隔
         if(@PointerCurr>0)
         Begin
             set @TId=cast(SUBSTRING(@catalogIDArray,@PointerPrev+1,@PointerCurr-@PointerPrev-1) as int)
              Insert into Common_ManagerINCatalogs (ManagerID,CatalogID) Values(@ManagerID,@TId)
             SET @PointerPrev = @PointerCurr
         End
         else
             Break
     End
    
     set @TId=cast(SUBSTRING(@catalogIDArray,@PointerPrev+1,LEN(@catalogIDArray)-@PointerPrev) as int)
    Insert into Common_ManagerINCatalogs (ManagerID,CatalogID) Values(@ManagerID,@TId)
     Set NoCount OFF
     if @@error=0
     begin
         commit transaction
     end
     else
     begin
   rollback transaction
     end

  SELECT @Message = '{Success}'

GO

posted @ 2005-12-22 16:23  苔苔以苔苔以苔  阅读(328)  评论(0编辑  收藏  举报
猪先飞