【NCRE】初遇 SQL SERVER 的 CASE WHEN
阿新 • • 發佈:2019-01-26
我們的c#中經常用到了switch case,那麼在sql中是否也有這樣的一種格式或者是功能呢?
CASE WHEN 是sql server中的重要關鍵字之一,也許你對他有很多的理解,但是他真的有很多的用法,今天我就來向大家介紹一種。
實現簡單的搜尋功能;
資料庫中的表:
現在我們要實現根據專業看各個學院有多少的人。
case when 語句:
實現的效果:
由於我的這個例子資料量很小,所以好像看不出來他的優勢。但是這個例子很簡單的讓我們都瞭解了他的最基本的語法結構。
當我們的資料量很大,用我們的機房的那種一句sql語句開啟一個sqlhelper的方法速度就會很慢的。而用它可以大大的減少時間。
在NCRE中,更新分數和考生答題記錄,師哥就是用的這種方法。這是一個D層的程式碼:
<span style="font-size:18px;"> public void ReturnScore(List<IEQuestionRecordEntity> list, IEQuestionRecordEntity studentrecord) { String which = WhichIERecored(studentrecord); StringBuilder sbSql = new StringBuilder(); sbSql.Append(" update IEQuestionRecordEntity_" + which + " SET fraction = CASE questionID "); string Fation = string.Empty; string questionID = string.Empty; string studentIDs = string.Empty; string tamstamp = string.Empty; //根據學號,和時間戳選出這一段的內容,然後再根據QuestionID給每一個flag更新分數。 #region 更新分數的拼接sql語句 for (int i = 0; i < list.Count; i++) { questionID = list[i].questionID.ToString(); //將分數傳給變數 Fation = list[i].fraction.ToString(); //判分sql,拼接sql,用case,when語句 sbSql.Append(" WHEN '" + questionID + "' THEN '" + Fation + "'"); } sbSql.Append(" end,"); //加“,” #endregion #region 拼接考生答案更新到資料庫中 //拼接更新考生答案sql sbSql.Append(" examAnswer = CASE questionID"); for (int i = 0; i < list.Count; i++) { string examAnswer = list[i].examAnswer.ToString(); questionID = list[i].questionID.ToString(); //學生答案資訊更新,when後邊的是QuerstionID, sbSql.Append(" WHEN '" + questionID + "' THEN '" + list[i].examAnswer + "'"); } sbSql.Append(" end"); //不加逗號“,” #endregion studentIDs += "'" + list[0].studentID.ToString() + "'"; tamstamp += "'" + list[0].timeStamp.ToString() + "'"; studentIDs.Remove(studentIDs.Length - 1, 1); sbSql.Append(" where studentID in (" + studentIDs + ") and timeStamp in (" + tamstamp + ")"); DataTable dt = sqlhelper.ExecuteQuery(sbSql.ToString(), CommandType.Text); }</span>
利用迴圈和CASE WHEN,解決了多次開啟SQLHelper的問題。
SQL 提供了巨大的語句,給我們的程式碼帶來了更大程度上的方便。