我的桌子:
id address tag
1 test class1
2 test1 class2
3 test3 class3
在UI中,我将所有标签名称显示为复选框。 当用户选择一个或多个标签名称时,需要获取所需的地址值。如何获得? 如果用户在UI中选择class1,class2则需要获得test,test1作为结果。 请告诉我如何在sqlserver 2008中编写查询。
编辑代码:
taglist = "class1,class2";
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["con"].ConnectionString);
SqlCommand cmd = new SqlCommand("usp_GetTags", con);
cmd.Parameters.Add("@Tags", SqlDbType.VarChar).Value = taglist;
con.Open();
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
虽然传递上面的参数没有得到任何结果。如果我传递单个taglist = class1获得results.but taglist =“class1,class2”没有得到任何结果。请告诉我如何从UI传递多个参数。
答案 0 :(得分:1)
您可以使用IN
关键字在sql server中编写查询。
Select address from mytable where tag IN ('class1','class2')
编辑:
将带有值的参数添加到存储过程中,如下所示。以下代码是用C#.net
编写的 comand.Parameters.AddWithValue("@Parameter1", "class1");
comand.Parameters.AddWithValue("@Parameter2", "class2");
编辑2: 将所有值放在单个字符串中非常简单,因此您的查询也适合。在您的存储过程中编写查询,如
Select address from mytable where tag IN (@SingleParameter)
并在您的编码部分写下如下
string SingleParameter = "";
SingleParameter = "class1,class2,class3";
comand.Parameters.AddWithValue("@SingleParameter",SingleParameter);
编辑3: 最后,我找到了解决问题的方法。编写存储过程如下
ALTER PROCEDURE dbo.TestSP
/*
(
@parameter1 int = 5,
@parameter2 datatype OUTPUT
)
*/
@SingleParameter varchar(30)
AS
/* SET NOCOUNT ON */
declare @tags varchar(500)
set @tags = @SingleParameter
create table #t (tag varchar(10))
set @tags = 'insert #t select ' + replace(@tags, ',', ' union select ')
exec(@tags)
Select address from sample1 where (tag in (select tag from #t))
drop table #t
RETURN
并发送参数SingleParameter如下
string SingleParameter = "";
SingleParameter = "'class1','class2','class3'";
comand.Parameters.AddWithValue("@SingleParameter",SingleParameter);