2016-09-26 84 views
-1

我想實現一個while循環,如果條件(與函數調用)在case語句。基本上,我試圖做到這一點:while,如果情況下的條件語句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列,最終的總列數爲10列。

我有2個功能:gettempresponsebyid:它返回響應字符串和isnumeric函數,它轉換爲數字。

有人可以請建議一個更好的方式做到這一點。我得到這個錯誤:

INCORRECT SYNTAX NEAR IF AND INCORRECT SYNTAX NEAR RUNNINGTOTAL.

+0

你能提供ddl,輸入數據和預期輸出嗎?看起來我們不需要做循環 –

+2

這不是'CASE' *表達*的用途。請分享一些示例數據和期望的結果。這聽起來像你正在解決所有問題(閱讀:[什麼是XY問題?](http://meta.stackexchange.com/a/66378)) – Siyual

+0

您正在考慮數據處理一個傳統的編程語言 - 迭代地。 SQL有不同的範例,其主要用途不包括迭代。您可以在TSQL擴展中進行迭代,但是這是次要的SQL。這些天大部分時間你都會使用窗口函數來運行總計。 – ajeh

回答

3

問:我可以實現while循環,如果條件中case語句。

答案: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

一開始,有IF語句替換CASE表達的無效使用。

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

但即使有了這種變化,目前仍不清楚您試圖達到的目標或您嘗試解決的問題。可能有更好的方法來做你正在做的事情,但我們只是在猜測你正在嘗試做什麼。

+0

此過程的預期輸出是runningtotal,它將是runningtotal = runningtotal + numericof(response_string),響應字符串是「gettempresponsebyid」功能。所以,如果用戶不小心輸入了數字以外的任何值,那麼它將返回0並計算運行總數。然後,此runningtotal輸出必須存儲在total_correct列(列6至9 =列10)中。 我被卡住了,不知道要遵循哪種方法。你能爲此建議一種解決方法嗎?如果你喜歡,我可以發佈僞代碼。謝謝 – user3147594