2010-04-08 75 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'

干杯