摘要: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