[SQL ] 請問大家關於WHERE子句的問題

看板Database (資料庫)作者 (會長繞跑了)時間18年前 (2006/09/21 20:15), 編輯推噓3(300)
留言3則, 2人參與, 最新討論串1/2 (看更多)
資料庫名稱:SQL Server 2000 資料庫版本:sp3 內容/問題描述: 以往我將前端的Method(例如ASP.NET資料存取層的Method) 對應到SQL Statement(或預存程序)時 都是採用下列方法 --------------------------------------------- 抓取學生資料的Method => GetDataByStudentID(int StudentID) 對應的SQL Statement就像以下例子一樣 SELECT * FROM TABLE WHERE StudentID = @StudentID --------------------------------------------- @StudnetID是傳進去的參數 但我現在遇到了一個問題 就是如果我所使用的Method 有使用兩個以上的過濾條件時候 而且這兩個過濾條件不一定得出現 這時候如果SQL Statement預先把WHERE子句寫死了 就有點糟糕了 例如抓取男生 身高為160的學生資料 => GetDataBySexAndHeight("男", 160) 對應的SQL statement會是如下 SELECT * FROM TABLE WHERE Sex='男' AND Height=160 如果今天我想要利用同樣的一個Method 但不設限任何條件 也就是要抓出所有的資料 Method裡面的參數就會是空的 GetDataBySexAndHeight("", "") 而因為SQL statement的WHERE子句已經寫死了 產生出的SQL code就會如下 SELECT * FROM TABLE WHERE Sex='' AND Height='' 這個SQL statement很明顯一看就知道是錯的 無法選出所有的資料 上述的例子只有兩個參數 每個參數都有出現 與不出現兩種可能 所以如果要每種可能的組合都寫一個method 就會2x2=4種method 參數越多 method就得跟著越多 顯然用method來對應不是一個好辦法 而我會有這個需求的原因是 .NET希望programmer利用參數來執行SQL指令 如果自己用字串相加的話 怕會有SQL injection的問題 所以雖然可以使用動態產生出WHERE子句 再將其合併到原先的SQL statement 但在ASP.NET裡面並不是很恰當的作法 而我目前利用的方法 是使用ADO.NET的DataView中的RowFilter字串 設定這些WHERE子句 功能上是可以滿足我的需求 但有兩個缺點 第一是存取資料的邏輯就跑出資料庫的範圍了 第二是如此一來就得先撈回所有資料 再使用DataView去過濾掉不要的資料 請問大家還有其他解法嗎 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.109.169.200 ※ 編輯: seagal 來自: 140.109.169.200 (09/21 20:52)

09/21 21:03, , 1F
用 like 硬幹?
09/21 21:03, 1F

09/21 21:56, , 2F
用Like好像也可以 這主義真不賴:)
09/21 21:56, 2F

09/21 22:03, , 3F
但Like可以用來比較字串 如果用來比較數字就又不行了
09/21 22:03, 3F
※ 編輯: seagal 來自: 140.109.169.200 (09/21 23:47)
文章代碼(AID): #154e9kaT (Database)
文章代碼(AID): #154e9kaT (Database)