Как сравнить две строки с помощью if в хранимой процедуре в sql server 2008?

Я хочу сделать что-то вроде этого:

declare @temp as varchar
    set @temp='Measure'

if(@temp == 'Measure')
   Select Measure from Measuretable
else
   Select OtherMeasure from Measuretable

4 ответов


две вещи:

  1. нужен только один (1) знак равенства, чтобы оценить
  2. вы нужно чтобы указать длину на VARCHAR-по умолчанию используется один символ.

использование:

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

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

VARCHAR(10) означает, что VARCHAR будет вмещать до 10 символов. Больше примеров поведения -

DECLARE @temp VARCHAR
    SET @temp = 'm'

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

...возвращает "да"!--5-->

DECLARE @temp VARCHAR
    SET @temp = 'mtest'

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

...вернется "нет".


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

то, что вы хотите, это оператор SQL case. Форма их такова:--4-->

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

или:

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

в вашем примере вы после:

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

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

вы также можете попробовать это на совпадение строки.

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'