0


OK、答えが簡単かもしれない質問がありますが、それを行う方法がわかりません:

質問:
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 に答える