Replace values in a CSV string

后端 未结 4 1160
忘了有多久
忘了有多久 2021-01-25 08:22

I have a list of products in comma separated fashion and since the item list was replaced with new product items, I am trying to modify this CSV list with new product item list.

4条回答
  •  情话喂你
    2021-01-25 09:18

    Convert your comma separated list to XML. Use a numbers table, XQuery and position() to get the separate ID's with the position they have in the string. Build the comma separated string using the for xml path('') trick with a left outer join to #tempprod and order by position().

    ;with C as
    (
      select T.id,
             N.number as Pos,
             X.PList.value('(/i[position()=sql:column("N.Number")])[1]', 'int') as PID
      from @tmp as T
        cross apply (select cast(''+replace(plist, ',', '')+'' as xml)) as X(PList)
        inner join master..spt_values as N
          on N.number between 1 and X.PList.value('count(/i)', 'int')
      where N.type = 'P'  
    )
    select C1.id,
           stuff((select ','+cast(coalesce(T.newid, C2.PID) as varchar(10))
                  from C as C2
                    left outer join @tmpprod as T
                      on C2.PID = T.oldid
                  where C1.id = C2.id
                  order by C2.Pos
                  for xml path(''), type).value('.', 'varchar(max)'), 1, 1, '')
                  
    from C as C1
    group by C1.id
    

    Try on SE-Data

提交回复
热议问题