2016-09-26 3 views
-1

Я пытаюсь реализовать цикл while и условие (с вызовом функции) в case case. В основном, я пытаюсь сделать это:while и if condition in case case t-sql

begin 
    case 
     when (condition1 and condition 2 and ncolumn_num between 6 and 9) 
      then 
      while @i < 10 
      begin 
       if(hsip.Is_numeric(hsip.getTempResponseById(@cregion, @cState_code, @nFY, @nReport_id, @nsection_id, @nquestion_number, @ndisplay_number, @nquestion_number, @nquestion_part_number, @suser_id, @nrow_number, i, @suser_id))) 

@nrunningtotal = @nrunningtotal + hsip.getTempResponseById(@cRegion, @cState_code, @nFY, @nReport_id, @nsection_id, @nquestion_number, @ndisplay_number, @nquestion_number, 
    @nquestion_part_number, @suser_id, @nrow_number, @ncolumn_number, @suser_id) 

     end if 
end 

Могу ли я реализовать цикл while и условие в выражении case. Моя бизнес-логика требует, чтобы я составил столбцы от 6 до 9 и имел итоговое итоговое значение в col: 10.

У меня есть 2 функции: gettempresponsebyid: который возвращает строку ответа и isnumeric функция, которая преобразует в число.

Может кто-нибудь предложить лучший способ сделать это. Я получаю эту ошибку:

INCORRECT SYNTAX NEAR IF AND INCORRECT SYNTAX NEAR RUNNINGTOTAL.

+0

Можете ли вы предоставить ddl, входные данные и ожидаемый результат? Похоже, нам не нужно делать while while –

+2

Это не то, что означает выражение 'CASE' *. Пожалуйста, поделитесь некоторыми примерами данных и желаемыми результатами. Похоже, вы ошибаетесь в своей проблеме (читайте: [Что такое проблема XY?] (Http://meta.stackexchange.com/a/66378)) – Siyual

+0

Вы думаете о обработке данных, как в традиционный язык программирования - итеративно. SQL имеет другую парадигму, ее основное использование не включает итерацию. Вы можете выполнять итерацию в расширении TSQL, но это вторично для SQL. Вы получаете текущие итоги с помощью функций окна в большинстве случаев в наши дни. – ajeh

ответ

3

Вопрос: Могу ли я реализовать цикл while и если условие в case case.

A: No. CASE не является заявлением T-SQL . Это выражение .

https://msdn.microsoft.com/en-us/library/ms181765.aspx

В размещенном коде, одна большая проблема синтаксиса начинается прямо здесь:

BEGIN CASE ... 
    ^

Используйте IF/ELSE заявление условно контролировать поток в T-SQL.

https://msdn.microsoft.com/en-us/library/ms182717.aspx

Для начала замените недопустимое использование выражения CASE с IF заявлением.

BEGIN 
    IF (condition1 AND condition2 AND ncolumn_num between 6 and 9) 
    BEGIN 
     ... 
    END; 
    END IF; 
END; 

Но даже с этим изменением, это все еще не ясно, что вы пытаетесь достичь или какую проблему вы пытаетесь решить. Вероятно, гораздо лучший способ сделать то, что вы пытаетесь сделать, но мы просто выбросим догадки о том, что вы пытаетесь сделать.

+0

Ожидаемый результат для этой процедуры: runtotal, который будет runningtotal = runningtotal + numericof (response_string), строка ответа - это вывод« gettempresponsebyid », функция. Таким образом, если пользователь случайно вводит что-либо иное, кроме числового значения, он возвращает 0 и вычисляет текущую сумму. Затем этот ходовой результат должен быть сохранен в столбце total_correct (col 6, хотя 9 = colno. 10). Я застрял и не знаю, какой подход следовать. Можете ли вы предложить обходной путь для этого. Я могу опубликовать псевдокод, если хотите. благодаря – user3147594