0

Dynamic query誰かがこれを解決するのを手伝ってくれる?Static one

DECLARE @REPCD VARCHAR(10)
SET @REPCD='CA%'

IF (CHARINDEX('*',@REPCD,1)>0 OR  CHARINDEX('%',@REPCD,1)>0) 
BEGIN
    SET @WHERE = ' AND REP_CD like ''' + REPLACE(@REPCD, '''', '') + ''''
END
ELSE
BEGIN
    SET @WHERE = ' AND REP_CD = ''' + REPLACE(@REPCD, '''', '') + ''''
END

上記のクエリを次のようなものに変換したいと思います

SELECT * FROM REP
WHERE CASE WHEN CHARINDEX('%',@REPCD,1)>0 THEN REP_CD like 'CA%' END AS REP_CD
4

3 に答える 3

2

なぜこれがうまくいかないのですか?

...
WHERE REP_CD LIKE REPLACE(@REPCD, '*', '%');

@REPCDワイルドカードが含まれていない場合は、LIKEと同じように機能し=ます。CASEしたがって、条件付きロジックのその他のバリエーションの理由はまったくありません。

現在、動的 SQL なしでLIKE/交換可能にする方法はありません。=まあ、私はこの複雑な方法があると思います (REP_CD を NULL にすることはできないと仮定します) が、これが私が上に投稿したものよりも優れている理由はわかりません。

SET @REPCD = REPLACE(@REPCD, '*', '%');

...
WHERE REP_CD LIKE CASE WHEN CHARINDEX('%', @REPCD) > 0 THEN @REPCD ELSE REP_CD END
AND REP_CD = CASE WHEN CHARINDEX('%', @REPCD) > 0 THEN REP_CD ELSE @REPCD END
于 2012-07-24T13:20:23.467 に答える
0
select * 
from Rep
where Rep_CD like replace(@repcd, '*','%')
于 2012-07-24T13:24:31.153 に答える
0

これを試して

DECLARE @REPCD VARCHAR(10)
SET @REPCD='CA'
set @REPCD=REPLACE(@REPCD,'*','%')
SELECT * FROM REP where REP_CD like @REPCD 
于 2012-07-24T13:24:57.500 に答える