Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как использовать case как управляющий оператор  [new]
Nike59
Member

Откуда:
Сообщений: 87
Добрый день.

среда:
Microsoft SQL Server Management Studio 9.00.4035.00
Microsoft Analysis Services Client Tools 2005.090.4035.00
Microsoft Data Access Components (MDAC) 2000.085.3006.00 (xpsp_sp3_qfe.080821-1625)
Microsoft MSXML 2.6 3.0 4.0 6.0
Microsoft Internet Explorer 8.0.6001.18702
Microsoft .NET Framework 2.0.50727.3082
Operating System 5.1.2600


Хочется использовать case как оператор управляющий выполнением фрагментов кода по условию, тестовый пример:

Declare @Val0 int
Declare @Val1 int
Declare @Val2 int
Declare @Val3 int
Declare @FlagM int

SET @Val1=1
SET @Val2=2
SET @Val3=0

SET @FlagM=0
SET @Val0=0

CASE @FlagM
WHEN 0 THEN
if @Val1 > @Val2
SET @Val0=@Val1
WHEN 1 THEN
if @Val1 < @Val2
SET @Val0=2
WHEN 3 THEN
SET @Val0=3
ELSE SET @Val0=10

END
print @Val0

при выполнении получаю:

Msg 156, Level 15, State 1, Line 14
Incorrect syntax near the keyword 'CASE'.
Msg 156, Level 15, State 1, Line 18
Incorrect syntax near the keyword 'WHEN'.
Msg 156, Level 15, State 1, Line 21
Incorrect syntax near the keyword 'WHEN'.
Msg 156, Level 15, State 1, Line 23
Incorrect syntax near the keyword 'ELSE'.
Msg 156, Level 15, State 1, Line 26
Incorrect syntax near the keyword 'print'.

что я делаю не так?
Заранее спасибо!
25 дек 13, 11:45    [15344229]     Ответить | Цитировать Сообщить модератору
 Re: как использовать case как управляющий оператор  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
используйте IF
CASE не является управляющим оператором, а является выражением.
25 дек 13, 11:55    [15344312]     Ответить | Цитировать Сообщить модератору
 Re: как использовать case как управляющий оператор  [new]
Дедушка Ау
Guest
Nike59,

Читаем BOL по теме CASE (Transact-SQL)
The CASE expression cannot be used to control the flow of execution of Transact-SQL statements, statement blocks, user-defined functions, and stored procedures.
25 дек 13, 11:59    [15344348]     Ответить | Цитировать Сообщить модератору
 Re: как использовать case как управляющий оператор  [new]
Nike59
Member

Откуда:
Сообщений: 87
Мистер Хенки,

я новичок в SQL
ну уж очень куцый if в SQL, нет даже elsif, да и нет end для завершения развесистой конструкции, так?
подскажите тогда, кроме if, есть ли какая-нибудь конструкция для управления фрагментами кода, сам пока не нашел....
25 дек 13, 12:52    [15344712]     Ответить | Цитировать Сообщить модератору
 Re: как использовать case как управляющий оператор  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
Nike59
ну уж очень куцый if в SQL, нет даже elsif, да и нет end для завершения развесистой конструкции, так?.


if
begin
...
end

else
begin
...
end

хватает на все, вложенные if тоже никто не отменял
25 дек 13, 13:06    [15344840]     Ответить | Цитировать Сообщить модератору
 Re: как использовать case как управляющий оператор  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
if @FlagM in (0,1,3)
begin

 if FlagM = 0
   if @Val1 > @Val2
      SET @Val0=@Val1

 if FlagM = 1
    if @Val1 < @Val2
       SET @Val0=2

 ...
end

else
     SET @Val0=10
 
25 дек 13, 13:11    [15344897]     Ответить | Цитировать Сообщить модератору
 Re: как использовать case как управляющий оператор  [new]
_djХомяГ
Guest
Declare @Val0 int
Declare @Val1 int
Declare @Val2 int
Declare @Val3 int
Declare @FlagM int

SET @Val1=1
SET @Val2=2
SET @Val3=0

SET @FlagM=0
SET @Val0=0

select @val0=
CASE @FlagM
WHEN 0 
     then case when  @Val1 >@Val2 then @val2
               else -10
     end              
WHEN 1 
   then case when @Val1 < @Val2 then 2
            else -20
   end         
WHEN 3 then 3
ELSE 10
END

select @val0
25 дек 13, 13:11    [15344899]     Ответить | Цитировать Сообщить модератору
 Re: как использовать case как управляющий оператор  [new]
Nike59
Member

Откуда:
Сообщений: 87
StarikNavy,

спасибо
25 дек 13, 13:14    [15344923]     Ответить | Цитировать Сообщить модератору
 Re: как использовать case как управляющий оператор  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Nike59
Мистер Хенки,

я новичок в SQL
ну уж очень куцый if в SQL, нет даже elsif, да и нет end для завершения развесистой конструкции, так?
подскажите тогда, кроме if, есть ли какая-нибудь конструкция для управления фрагментами кода, сам пока не нашел....

if @f=1 ...
else if @f=2 ...
else ...

что еще надо? Для циклов WHILE . BEGIN END - блок кода.
25 дек 13, 13:23    [15344994]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить