具有多个值的SQL参数

时间:2013-08-29 14:16:20

标签: c# sql

我目前正在传递一个带有一个值的SQL参数。

现在我有:

 SqlParameter sqlParameter = new SqlParameter("@Parameter", SqlDbType.VarChar);
 sqlParameter.Value = ParameterValue

这在我的SQL查询中的WHERE子句中工作正常。

但是现在我想保留选项,以便在我的WHERE中传递多个值。

我没有传递常规字符串,而是考虑传递带逗号的字符串来分隔值。

所以SqlParameter.Value = "value1, value2, value3";

我希望它像

一样

WHERE Parameter = value1 OR Parameter = value2 OR Parameter = value3

有一种简单的方法可以实现这一点,我实际上不必修改我的SQL查询吗?

3 个答案:

答案 0 :(得分:1)

结论:您将不得不更改SQL语句或存储过程以支持您要执行的操作。

在我看来,有很多不同的方法可以做你想要完成的事情,但没有一个是理想的。 Erland Sommarskog写了一篇很棒的文章,解释了将数组和列表传递给SQL Server(http://www.sommarskog.se/arrays-in-sql-2005.html)的许多方法,我建议阅读。如果您使用的是SQL Server 2008或更高版本,那么干净的方法是使用表值参数(http://www.sommarskog.se/arrays-in-sql-2008.html)。使用这种方法,您基本上将一组值传递给SQL Server。

如果您使用表值参数方法,您的参数将表现为一个表,您可以从中选择SELECT值。因此,例如,您可以像这样修改存储过程(或SQL语句):

 CREATE PROCEDURE get_products @Parameter myCustomParameterType READONLY AS
 SELECT p.ProductID, p.ProductName
 FROM   Products p
 WHERE  p.ProductID IN (SELECT n FROM @Parameter)

还有另一个SO问题/答案,提供了有关此方法的更多详细信息:How to pass table value parameters to stored procedure from .net code

有关表值参数的更多信息,请访问:http://msdn.microsoft.com/en-us/library/bb675163.aspx

答案 1 :(得分:0)

如果您的查询是“where parameter = @paramter”,则不会。

将您的查询更改为“where parameter in ...”

或者将您的值放入另一个表/表变量并加入它们。

答案 2 :(得分:0)

如果你想传入逗号分隔列表以检查值,你可以获取列表,将其拆分并将其插入临时表或表变量然后你可以做 所有正常的表语句,如JOIN,IN,EXISTS。

这是一篇很好的文章,介绍如何使用逗号分隔的字符串并将其转换为表格。 http://blogs.msdn.com/b/amitjet/archive/2009/12/11/sql-server-comma-separated-string-to-table.aspx