1. 程式人生 > >【NCRE】初遇 SQL SERVER 的 CASE WHEN

【NCRE】初遇 SQL SERVER 的 CASE WHEN

        我們的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 提供了巨大的語句,給我們的程式碼帶來了更大程度上的方便。