任何人都可以帮我解决这个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
答案 0 :(得分: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
答案 1 :(得分:0)
select *
from Rep
where Rep_CD like replace(@repcd, '*','%')
答案 2 :(得分:0)
试试这个
DECLARE @REPCD VARCHAR(10)
SET @REPCD='CA'
set @REPCD=REPLACE(@REPCD,'*','%')
SELECT * FROM REP where REP_CD like @REPCD