我当前正在传递一个带有一个值的 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 查询?
底线:您将必须更改 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 问题/答案,在这里提供了有关此方法的更多详细信息:如何将表值参数从 .net 代码传递到存储过程
有关表值参数的更多信息可以在此处找到:http://msdn.microsoft.com/en-us/library/bb675163.aspx
如果您的查询是“where parameter = @paramter”,则不是。
将查询更改为“where parameter in...”
或者将您的值放入另一个表/表变量中并连接它们。
如果您想传递一个逗号分隔的列表来检查值,您可以获取该列表,将其拆分并将其插入到临时表或表变量中,然后您可以执行以下操作 所有普通表语句,例如 JOIN、IN、EXISTS。
这是一篇好文章,介绍如何采用逗号分隔的字符串并将其转换为表格。