SQL split的方法

摘要:SQL split的方法

需求:當我需要在購物車使用同時多筆更新時,使用者同時更改多筆商品數量!但我不可能逐筆回寫!!且須要用在預存程序上

使用方式:我將商品ID和數量用","隔開,所以一定是兩個為一組傳入給預存程序再開始拆解做UPDATE

 

CREATE PROCEDURE [dbo].[nop_CarItemCountUpdate]
	
--input
	 @UID [varchar] (20),
	 @PIDandCount [varchar] (600) ,
	 
--output
	 @success [bit] output	
	 
	 
AS


BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

    -- Insert statements for procedure here
   
Declare @aString varchar(600) 
DEclare @pattern varchar(1)   
set @aString =   @PIDandCount --傳入的字串
set @pattern =   ',' --隔開的符號

  
          declare @i int --計算隔開符號在字串裡的位置
          declare @TempSTR1 int --切割出來後暫存的產品ID位置
          declare @TempSTR2 int  --切割出來後暫存產品數量位置
          set @aString=rtrim(ltrim(@aString)) --先把左右空白清除
         
          set @i=charindex(@pattern,@aString)  --先記錄符號位置
          while @i>=1                                                 --假設>1代表還沒分割完
          begin  
            SET   @TempSTR1=(left(@aString,@i-1))  --先割出產品ID,利用符號位置-1來割字數
            set   @aString=substring(@aString,@i+1,len(@aString)-@i) --重新調整割完後的字串  
            set   @i=charindex(@pattern,@aString) --再抓數量
           if @i=0  --當數量等於0代表為最後一組 否則還有下一組
              begin
               SET   @TempSTR2=(@aString)
               update ShoppingCarDetails set [count]=@TempSTR2 where (UID=@UID) and (PID=@TempSTR1)
              end
           else
              begin
                SET   @TempSTR2=(left(@aString,@i-1))  
                SET   @aString=substring(@aString,@i+1,len(@aString)-@i)  
                SET   @i=charindex(@pattern,@aString)
                update ShoppingCarDetails set [count]=@TempSTR2 where (UID=@UID) and (PID=@TempSTR1)
              end
          end  
  
  end