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

Откуда:
Сообщений: 139
Добрый день. Подскажите пожалуйста как организовать ветвление.
В хранимую процедуру передается значение параметра @GroupViewID as int.
Каким образом организовать чтобы при каждом значении @GroupViewID (1,2,3) выполнялся отдельный select?
Насколько я понял операторы if, case для этого не подходят, т.к. работают внутри select.
+

ALTER PROCEDURE [dbo].[sp_avt_insert_Monthdata] @Datetime as smalldatetime, @GroupViewID as int
	AS
		 
if 	@GroupViewID = 1 then 
	declare 
              select     ...
       end
else if @GroupViewID = 2
          declare 
             select       ...
       end
else @GroupViewID = 3
       declare 
              select     ...
       end
end if

22 дек 15, 14:18    [18594257]     Ответить | Цитировать Сообщить модератору
 Re: Ветвление в хранимой процедуре. При каждом значении переменной свой select.  [new]
Glory
Member

Откуда:
Сообщений: 104760
ncux199rus
Насколько я понял операторы if, case для этого не подходят, т.к. работают внутри select.

Только зачем вы какой то declare перед select поместили ?
22 дек 15, 14:20    [18594270]     Ответить | Цитировать Сообщить модератору
 Re: Ветвление в хранимой процедуре. При каждом значении переменной свой select.  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
Glory,

это, похоже, Begin на нижнетагильском
22 дек 15, 14:20    [18594281]     Ответить | Цитировать Сообщить модератору
 Re: Ветвление в хранимой процедуре. При каждом значении переменной свой select.  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
А про end if где можно почитать?
22 дек 15, 14:22    [18594303]     Ответить | Цитировать Сообщить модератору
 Re: Ветвление в хранимой процедуре. При каждом значении переменной свой select.  [new]
ncux199rus
Member

Откуда:
Сообщений: 139
Шыфл
Glory,

это, похоже, Begin на нижнетагильском

оно самое.
22 дек 15, 14:23    [18594308]     Ответить | Цитировать Сообщить модератору
 Re: Ветвление в хранимой процедуре. При каждом значении переменной свой select.  [new]
правильный проходящий.
Guest
ncux199rus
Насколько я понял операторы if, case для этого не подходят, т.к. работают внутри select.
IF внутри select? Вы где такой травы набрались?
22 дек 15, 14:25    [18594342]     Ответить | Цитировать Сообщить модератору
 Re: Ветвление в хранимой процедуре. При каждом значении переменной свой select.  [new]
ncux199rus
Member

Откуда:
Сообщений: 139
Видимо несколько туповат.
В такой конструкции все заработало.
Спасибо.
+

if @GroupViewID = 1

select ...

if @GroupViewID = 2

select ...

if @GroupViewID = 3

select ...


22 дек 15, 14:32    [18594414]     Ответить | Цитировать Сообщить модератору
 Re: Ветвление в хранимой процедуре. При каждом значении переменной свой select.  [new]
ncux199rus
Member

Откуда:
Сообщений: 139
Подскажите что здесь не так? Отдельно запрос работает.
При наполнении курсора опять ругается на неправильный синтаксис около первого if (if @GroupViewID = 1 ).

+

ALTER PROCEDURE [dbo].[sp_avt_insert_Monthdata] @Datetime as smalldatetime, @GroupViewID as int
AS

declare @value real
declare @paramid int
declare @InputMode int

declare cursor_month CURSOR
for

if @GroupViewID = 1

select ...

if @GroupViewID = 2

select ...

if @GroupViewID = 3

select ...

open cursor_month
FETCH NEXT FROM cursor_month INTO @paramid,@Datetime,@value,@InputMode
WHILE @@FETCH_STATUS = 0
begin
идет проверка на наличие строк
end

FETCH NEXT FROM cursor_month INTO @paramid,@Datetime,@value,@InputMode
END

close cursor_month
deallocate cursor_month
22 дек 15, 15:10    [18594762]     Ответить | Цитировать Сообщить модератору
 Re: Ветвление в хранимой процедуре. При каждом значении переменной свой select.  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20591
А соображалку включить? ну кто пихает управляющие конструкции в середину другой конструкции???

if @GroupViewID = 1 

  declare cursor_month CURSOR 
  for	
  select ...

elseif @GroupViewID = 2

  declare cursor_month CURSOR 
  for	
  select ...

elseif @GroupViewID = 3

  declare cursor_month CURSOR 
  for	
  select ...
22 дек 15, 15:12    [18594781]     Ответить | Цитировать Сообщить модератору
 Re: Ветвление в хранимой процедуре. При каждом значении переменной свой select.  [new]
правильный проходящий.
Guest
ncux199rus
Подскажите что здесь не так? Отдельно запрос работает.
При наполнении курсора опять ругается на неправильный синтаксис около первого if (if @GroupViewID = 1 ).
Вот и ищите косяк в этом промежутке
for

if @GroupViewID = 1
Наверняка объявление курсора кривое.
22 дек 15, 15:13    [18594785]     Ответить | Цитировать Сообщить модератору
 Re: Ветвление в хранимой процедуре. При каждом значении переменной свой select.  [new]
Glory
Member

Откуда:
Сообщений: 104760
ncux199rus
При наполнении курсора опять ругается на неправильный синтаксис около первого if (if @GroupViewID = 1 ).

В синтаксисе команды declare cursor нет конструкции IF
22 дек 15, 15:13    [18594789]     Ответить | Цитировать Сообщить модератору
 Re: Ветвление в хранимой процедуре. При каждом значении переменной свой select.  [new]
правильный проходящий.
Guest
ncux199rus,

правильно ли я понимаю, что вы хотите получить динамическое, в зависимости от значения переменной, определение курсора? Если да, то при чем тут вся та фигня, что задекларирована в названии темы?
22 дек 15, 15:17    [18594813]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить