1

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

所以现在我有:

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

WHERE在我的 SQL 查询中的子句中运行良好。

但是现在我想保留在我的WHERE.

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

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

我希望它表现得像

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

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

4

3 回答 3

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。

如果您采用表值参数方法,您的参数将表现得像一个表,您可以从中选择值。因此,例如,您可以像这样修改存储过程(或 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

于 2013-08-29T14:33:42.337 回答
0

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

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

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

于 2013-08-29T14:21:33.053 回答
0

如果你想传入一个逗号分隔的列表来检查值,你可以取出列表,将其拆分并将其插入到临时表或表变量中,然后你可以执行所有正常的表语句,例如 JOIN、IN、存在。

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

于 2013-08-29T14:27:27.263 回答