Re: [討論] 請問當傳入SP的某個參數"數量"不固定時
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
06/06 16:39, 1F
→
06/06 16:40, , 2F
06/06 16:40, 2F
→
06/06 16:42, , 3F
06/06 16:42, 3F
推
06/06 16:59, , 4F
06/06 16:59, 4F
→
06/06 17:40, , 5F
06/06 17:40, 5F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
Database 近期熱門文章
PTT數位生活區 即時熱門文章