具有多个值的 SQL 参数

问题描述 投票:0回答:3

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

c# sql
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 问题/答案,在这里提供了有关此方法的更多详细信息:如何将表值参数从 .net 代码传递到存储过程

有关表值参数的更多信息可以在此处找到:http://msdn.microsoft.com/en-us/library/bb675163.aspx


0
投票

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

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

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


0
投票

如果您想传递一个逗号分隔的列表来检查值,您可以获取该列表,将其拆分并将其插入到临时表或表变量中,然后您可以执行以下操作 所有普通表语句,例如 JOIN、IN、EXISTS。

这是一篇好文章,介绍如何采用逗号分隔的字符串并将其转换为表格。

© www.soinside.com 2019 - 2024. All rights reserved.