2013-01-10 76 views
0


使用與LIKE

OK我有這一個答案可能很簡單,但我是一個問題,不知道如何做到這一點:

問:
如何使用與LIKE ?

爲什麼不重複:
嗯,我知道如果我有多個字符串,我可以使用OR檢查。但是,我不想這麼做。

問題闡釋:
我有一個SP用參數@path,現在我想發送的多個路徑,通過分隔符隔開,(避免調用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一起使用。這肯定是一個不好的解決方案,並可能有其他解決方案。

+0

「以避免調用SP多次」 - 然後使用合適的數據結構 - 一個表值參數。不要將所有內容都放入'varchar(max)'中,只需要將其再次打開即可。 –

回答

6

更換這一說法

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

AND EXISTS (select 1 from @tempTable where prg.path like "%"+path+"%") 
+0

工作就像一個魅力男人,謝謝 –

+0

歡迎您 – hkutluay

+0

+1非常好的解決方案 – whytheq

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 
+0

這實際上並沒有工作.... –