我目前正在传递一个带有一个值的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查询吗?
答案 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