2013年3月27日 星期三

SQL Where條件 IN (組合字串 @Parameter)

最近在開發新的專案 ,為了要一次刪除多筆User所選取的資料 ,
故我在網頁的前端設計GridView讓User選取資料 ,
後端則再判斷User所選取的PK,組合起來傳進Stored Procedures 。

EX:

刪除 PK_ID(int) 員工編號(varchar) 員工姓名(nvarchar)
V 1 0001 Mike
3 0004 Alvis
V 19 0023 Mary

如上圖所示,User選取的 PK_ID = 1 及 PK_ID = 19 這兩筆資料要進行刪除

於是我用了String將PK組合起來

string strID = string.Format("{0},{1}",1,19);  //結果 strID 應該是 1,19

而在SQL 部分
@Parameter = strID;

DELETE FROM tb_Employee
WHERE PK_ID IN (@Parameter);

/*
理論上,以上的SQL指令應該是可以執行的才對啊!
殊不知,執行後卻出現
varchar無法轉換為int 的Error出現
*/

因為我們為了貪圖方便,所以@Parameter是以組字串的方式,故會將@Parameter為varchar或nvarchar,而當用這種方式在SQL執行時,系統會自動辨識為"字串",為了要解決這個問題,所以我們應該要把指令改為下列方式。

EXEC('DELETE FROM tb_Employee
WHERE PK_ID IN ('+@Parameter+')')

這樣系統才會正確的執行,提供給大家囉~