2010-04-08 126 views
5
declare @d varchar 
set @d = 'No filter' 

if (@d like 'No filter') 
    BEGIN 
    select 'matched' 
    end 
else 
    begin 
    select 'not matched' 
    end 

上面總是不匹配的結果,任何人可以告訴我爲什麼,我該如何使用等,或「=」結果我的存儲過程使用像語句結果。 感謝MS SQL中的if語句

回答

5

你的宣言更改爲

declare @d varchar(10) 

然後

declare @d varchar(10) 

set @d = 'No filter' 

if (@d LIKE 'No filter') 
    BEGIN 
    select 'matched' 
    end 
else 
    begin 
    select 'not matched' 
    end 

會工作。

請記住,LIKE用於模式匹配,

DECLARE @Val VARCHAR(10) 
SET @Val = 'foo bar' 
if (@Val LIKE '%foo%') 
    BEGIN 
    select 'matched' 
    end 
else 
    begin 
    select 'not matched' 
    end 

所以你的情況,你可能需要將代碼用「=改爲

declare @d varchar(10) 
set @d = 'No filter' 

if (@d = 'No filter') 
    BEGIN 
    select 'matched' 
    end 
else 
    begin 
    select 'not matched' 
    end 

4

需要聲明d爲varchar(100)不只是VARCHAR,否則它只是變成N

declare @d varchar 
set @d = 'No filter' 

應該是:

declare @d varchar(100) 
set @d = 'No filter' 

也用不着LIKE與此使用你可以使用=。

+0

添加打印@d或選擇@d來證實這一點。 – MJB 2010-04-08 15:57:59

+0

+1:正確 - 總是定義數據類型屬性比假定默認值是個好習慣。 – 2010-04-08 16:09:20

0

我覺得運算符非常有用。

IF( @PLI_Component = '' + @ITemID + '' + 'BD' OR @PLI_Component = '' + @ITemID + '' + 'BD/1' OR @PLI_Component = '' + @ ITemID +''+'BD/2' 或@PLI_Component =''+ @ITemID +''+'BD/3'
或@PLI_Component =''+ @ITemID +''+'BD/4'
OR @PLI_Component = '' + @ITemID + '' + 'BD/5'

可以更換

由只有一條線是

@PLI_Component LIKE @ITemID + 'BD'

乾杯