2010-05-20 3 views

risposta

16

Due cose:

  1. hanno bisogno solo di un (1) segno uguale per valutare
  2. È necessità di specificare una lunghezza sul VARCHAR: il valore predefinito è un singolo carattere.

Usa:

DECLARE @temp VARCHAR(10) 
    SET @temp = 'm' 

IF @temp = 'm' 
    SELECT 'yes' 
ELSE 
    SELECT 'no' 

VARCHAR(10) significa che il VARCHAR può ospitare fino a 10 caratteri. Altri esempi del comportamento -

DECLARE @temp VARCHAR 
    SET @temp = 'm' 

IF @temp = 'm' 
    SELECT 'yes' 
ELSE 
    SELECT 'no' 

... torneranno "sì"

DECLARE @temp VARCHAR 
    SET @temp = 'mtest' 

IF @temp = 'm' 
    SELECT 'yes' 
ELSE 
    SELECT 'no' 

... tornerà "no".

1
declare @temp as varchar 
    set @temp='Measure' 
    if(@temp = 'Measure') 
Select Measure from Measuretable 
else 
Select OtherMeasure from Measuretable 
+0

Questo non funziona per me l'ho provato. – Vishal

+3

@ VJ: Questo perché '@temp VARCHAR' significa che @temp memorizzerà solo il primo carattere; il resto viene troncato senza errori. –

+0

@VJ introdurre un parametro, non impostare il valore su temp – Andrey

1

Quello che vuoi è un case statement SQL. La forma di questi è uno:

select case [expression or column] 
    when [value] then [result] 
    when [value2] then [result2] 
    else [value3] end 

o:

select case 
    when [expression or column] = [value] then [result] 
    when [expression or column] = [value2] then [result2] 
    else [value3] end 

Nel tuo esempio che stai cercando:

declare @temp as varchar(100) 
set @temp='Measure' 

select case @temp 
    when 'Measure' then Measure 
    else OtherMeasure end 
from Measuretable 
1

si può anche provare questo per la stringa partita.

DECLARE @temp1 VARCHAR(1000) 
    SET @temp1 = '<li>Error in connecting server.</li>' 
DECLARE @temp2 VARCHAR(1000) 
    SET @temp2 = '<li>Error in connecting server. connection timeout.</li>' 

IF @temp1 like '%Error in connecting server.%' OR @temp1 like '%Error in connecting server. connection timeout.%' 
    SELECT 'yes' 
ELSE 
    SELECT 'no'