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

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

wynik powyższego zawsze nie jest dopasowany, czy ktoś może mi powiedzieć, dlaczego iw jaki sposób mogę użyć znaku podobnego lub "=" wyniku mojej procedury przechowywanej. dziękims sql używaj podobnych wyników instrukcji, jeśli instrukcja

Odpowiedz

5

Zmień swoją deklarację

declare @d varchar(10) 

Następnie

declare @d varchar(10) 

set @d = 'No filter' 

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

zadziała.

Proszę pamiętać, że LIKE służy do dopasowywania wzorców,

coś

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

Więc w twoim przypadku może chcesz zmienić kod do

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

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

z „= "

4

Musisz zadeklarować d jako varchar (100), nie tylko varchar, inaczej to po prostu staje N

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

Powinno być:

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

również nie ma potrzeby korzystania jak z tego możesz użyć =.

+0

Dodaj Print @d lub wybierz @d udowodnić to sobie. – MJB

+0

+1: Prawidłowo - dobrze jest zawsze definiować atrybuty typu danych niż zakładać wartości domyślne. –

0

Uważam, że operator jest bardzo użyteczny.

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

)

można zastąpić

tylko przez jedną linię, która jest

@PLI_Component LIKE @ITemID + 'BD'

Cheers

Powiązane problemy