0


好的,我有一个问题的答案可能很简单,但我不知道该怎么做:

问题:
我如何将 IN 与 LIKE 一起使用?

为什么不重复:
嗯,我知道我是否有多个字符串,我可以使用OR来检查。但我正在尝试做的事情并非如此。

问题解释:
我有一个带有参数@path的SP,现在我想发送多个路径,用分隔符分隔,(以避免多次调用sp)。我使用自定义函数拆分字符串,该函数返回具有拆分值的表。
现在我将如何使用该拆分值表中的值与 LIKE 运算符一起使用。

到目前为止我做了什么:

declare
    @path varchar(max) = 'CompanyRules/Billing/IntegrationServices|CompanyRules/Reports/IntegrationServices',
    @default_code varchar(max) = '1'

    declare @tempTable TABLE(path varchar(max))

    INSERT INTO @tempTable (path)
    SELECT split from fn_splitby(@path, '|')

    select prg.path, prg.default_code, prmd.optional_property_1, prmd.optional_property_2, prmd.optional_property_3, prmd.optional_property_4, prmd.optional_property_5, prmd.optional_property_6
    from pdm_rule_group prg, pdi_rule_master prmd
    where prg.path = prmd.path
    AND prg.path in (select path from @tempTable)
    AND prg.default_code != @default_code

这不会产生任何结果。

可能的解决方案:
我认为我必须遍历@tempTable,然后创建单独的字符串以与 LIKE 一起使用。我确定这是一个不好的解决方案,并且可能有其他解决方案。

4

2 回答 2

6

替换此语句

AND prg.path in (select path from @tempTable)

AND EXISTS (select 1 from @tempTable where   prg.path  like "%"+path+"%" )
于 2013-01-10T09:54:11.617 回答
0

只需加入表:

select prg.path, prg.default_code, prmd.optional_property_1, prmd.optional_property_2, prmd.optional_property_3, prmd.optional_property_4, prmd.optional_property_5, prmd.optional_property_6
from
   pdm_rule_group prg
     inner join
   pdi_rule_master prmd
     on prg.path = prmd.path
     inner join
   @tempTable tt
     on
        prg.path like tt.path
where 
    prg.default_code != @default_code
于 2013-01-10T09:58:13.477 回答