Re: [討論] 請問當傳入SP的某個參數"數量"不固定時

看板Database (資料庫)作者 (meteor007)時間7年前 (2017/06/04 14:54), 7年前編輯推噓1(104)
留言5則, 3人參與, 最新討論串2/2 (看更多)
Hi,分享一下我最新的做法, 避免以後的人看到我的原文的留言被誤導XD (結果是對的,但作法太爛) 前情提要: 假設有一個表格如下(tbPeopleInfo) Name Age Gender 1 Alex 30 Male 2 Ben 25 Female 3 Clark 24 Male 4 Dean 50 Female 5 Erik 73 Female User希望可以多選,有時選Alex,有時選Alex跟Erik,有時選Clark跟Erik 並回傳被選中的人的姓名、年齡、性別等資料 --------------------------------------------------- ***方法1. 使用Table Variable (這是我推文提到的方法的改良版) Step A. Create 一個 Table Variable Step B. Create 一個 Stored Procedure並傳入此Table Variable Step C. 將此Tale Variable和資料表格做Join --------------------------------------------------- ***方法2. 動態組SQL (我是在ASP.NET組動態語句) using (SqlConnection con = new SqlConnection(connectionstring)) { SqlCommand command = new SqlCommand(); command.Connection = con; StringBuilder dySQL = new StringBuilder("Select * from tbPeopleInfo"); dySQL.Append(" where 1 = 1 "); dySQL.Append(" and Name = 'Alex'"); dySQL.Append(" or Name = 'Ben'"); command.CommandText = dySQL.ToString(); con.Open(); SqlDataReader reader = command.ExecuteReader(); GridView1.DataSource = reader; GridView1.DataBind(); } (應該也可以在SP中組,但是我還不會= =) --------------------------------------------------- ***方法3. 動點手腳組input 並使用IN (這是我最後使用的做法) Step A. 將Input組成 'Alex,Ben' (用逗號隔開人名) Step B. 建立一個可以Split 逗號 的Function,此Function回傳Table (SQL Server 2016之後內建Split,我使用2012所以才要自己寫) Step C. where Clause 使用 IN 在SSMS中只有簡單四行 Declare @Input nvarchar(max) Set @Input = 'Alex,Mango,Clark,Guava' Select Name, Age, Gender from tbPeopleInfo where Name in (SELECT * FROM dbo.SplitString(@Input, ',')) 前兩行就是Stap A 後兩行使用IN 完成!! 基本上,整個方法3.可在此網頁找到,整個Credit都是他的!! http://bit.ly/2qMBh4r 也感謝某個來信跟我討論的前輩~ 雖然我最後沒有用你的方法,不過也是學到不少!! 也分享給需要的人 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 172.218.191.30 ※ 文章網址: https://www.ptt.cc/bbs/Database/M.1496559262.A.353.html ※ 編輯: meteor007 (172.218.191.30), 06/04/2017 14:56:12 ※ 編輯: meteor007 (172.218.191.30), 06/04/2017 14:57:24

06/06 16:39, , 1F
。。。原po你既然用方法3 為何不
06/06 16:39, 1F

06/06 16:40, , 2F
在asp.net組好 in('alex','xxxx')就好
06/06 16:40, 2F

06/06 16:42, , 3F
然後用方法2把sql語句換成最後組完語句就好
06/06 16:42, 3F

06/06 16:59, , 4F
推樓上 拆字或是加減乘除等等之類的運算建議前端先處理
06/06 16:59, 4F

06/06 17:40, , 5F
恩,最後我是這樣做的沒錯,這篇只是範例XD
06/06 17:40, 5F
文章代碼(AID): #1PCwwUDJ (Database)
文章代碼(AID): #1PCwwUDJ (Database)