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 回答