0

我得到了一个字符串,该字符串可以包含由波浪号分隔的多个优惠代码123~125~126
我还有一个表,它可能会可能不会定义父/子关系

tbl_allowed
============
offercode varchar(15)
parent_oc varchar(15)

ex:
offercode = 124
parent_oc = 126

我已经有一个函数可以获取分隔字符串并将其拆分,但我想获取字符串,将内容与其中的内容进行比较,然后通过将 parent_oc 列tbl_allowed中存在的任何值替换tbl_allowed为 offercode 列中的值来重新生成它. 如果不存在已定义的关系,则仅使用自身。

这很简单,只需一个优惠代码:

set @newOfferCode = (select top 1 coalesce(cac.offercode, @lOfferCode)
from tbl_allowed cac
where OfferCode = @lOfferCode or parent_oc = @lOfferCode)

select coalesce(nullif(@newOfferCode,''), @lOfferCode)

但是当我有一个波浪线分隔的字符串时我遇到了困难。有任何想法吗?

4

1 回答 1

0

这就是我最终做的事情。似乎工作。

    CREATE TABLE #tempoffers(OfferCode varchar(15), NewOfferCode varchar(15))

    INSERT INTO #tempoffers
    SELECT OutParam, null
    FROM dbo.SplitString(@lOfferCode, '~')

    update #tempoffers set NewOfferCode = coalesce(cac.offercode, mb.offerCode)
    from #tempoffers mb
    left outer join tbl_Allowed cac on mb.OfferCode = cac.parent_oc

            -- building the new string
    declare @newOfferCode varchar(5000)
    SELECT @newOfferCode = COALESCE(@newOfferCode + '~', '') + NewOfferCode FROM #tempoffers

    drop table #tempoffers
    SELECT @newOfferCode as OfferCode
于 2012-08-08T21:36:33.730 回答