2012-07-24 77 views
0

任何一个可以帮助我从解决这个Dynamic queryStatic one转换动态SQL静态SQL

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 

回答

2

为什么赢”这项工作?

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

@REPCD不包含通配符的情况下,LIKE作品就像=。所以根本没有理由CASE或条件逻辑的任何其他变化。

目前没有办法使LIKE/=没有动态SQL可互换。那么,我猜这是错综复杂的方式(假设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 
+0

感谢您的有价值的解决方案这是工作。 – Prabhavith 2012-07-25 03:17:55

0
select * 
from Rep 
where Rep_CD like replace(@repcd, '*','%') 
0

试试这个

DECLARE @REPCD VARCHAR(10) 
SET @REPCD='CA' 
set @REPCD=REPLACE(@REPCD,'*','%') 
SELECT * FROM REP where REP_CD like @REPCD