如何在sqlserver 2008中一次检查更多的列值?
问题描述:
我的表:如何在sqlserver 2008中一次检查更多的列值?
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);
而传递参数如上述没有得到任何results.if我通过单个标记列表= Class1的越来越results.but标记表=“1类,等级2”没有得到任何resuls.please告诉我如何从UI传递多个参数。
答
您可以使用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);
我试过,但得到错误作为无效列名的Class1,Class2中。 – user1237131 2012-03-28 11:47:02
@ user1237131,class1和class2不是列右侧,它们是标记列中的值。 – 2012-03-28 11:49:17
S它们是标记列中的列值。我尝试使用上面的语法,但是将错误列为“无效列名称'class1'”,就像那样 – user1237131 2012-03-28 11:51:36