2012-07-24 79 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