ms sql在if语句中使用like语句结果

时间:2010-04-08 15:54:55

标签: sql sql-server

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

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

上面的结果总是不匹配任何人都可以告诉我为什么以及如何在我的存储过程中使用like或'='结果。 感谢

3 个答案:

答案 0 :(得分: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

带有“=”

答案 1 :(得分:4)

您需要将d声明为varchar(100)而不仅仅是varchar,否则它只会变为N

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

应该是:

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

也不需要使用LIKE,你可以使用=。

答案 2 :(得分:0)

我发现操作员非常有用。

如果(                                     @PLI_Component =''+ @ITemID +''+'BD'                                  或@PLI_Component =''+ @ITemID +''+'BD / 1'                                  或@PLI_Component =''+ @ITemID +''+'BD / 2'                                  或@PLI_Component =''+ @ITemID +''+'BD / 3'
                                 或@PLI_Component =''+ @ITemID +''+'BD / 4'
                                 或@PLI_Component =''+ @ITemID +''+'BD / 5'

可以替换

只有一行是

@PLI_Component LIKE @ITemID +'BD'

干杯