将SQL列中的项与数组进行比较

时间:2014-03-21 20:06:22

标签: c# sql sql-server arrays

我有一个SQL服务器表,我想查询行上的项目,这些行的值等于Array中的项目。这是我的例子:

Column1    Column2    Column3
-------    -------    -------
aaa        100        200
bbb        100        400
aaa        200        78  
ccc        200        200

我的阵列:

string[] arr = {"ddd", "aaa", "fff", "bbb"}

所以,我想从匹配数组中的项的SQL行返回。我的SQL查询应返回column1与数组中的项匹配的项:

Column1    Column2    Column3
-------    -------    -------
aaa        100        200
bbb        100        400
aaa        200        78  

这一切都在C#中。帮助将是欣赏。

3 个答案:

答案 0 :(得分:1)

您可以使用IN(@PARAM)子句构建SQL查询,并使用String.Join加入它们,如下所示:

using(SqlConnection connection = new SqlConnection(
        connectionString)) {
    using(SqlCommand command = new SqlCommand()) {
            SqlDataReader reader = null;
        try {
            command.Connection = connection;
            command.CommandText = "SELECT * FROM <TABLE> WHERE <FIELD> IN (@PARAM)";
            command.CommandType = CommandType.Text;
            command.Parameters.Add(new SqlParameter(@"@PARAM",
                    String.Join(",", <array>)));
            connection.Open();
            reader = command.ExecuteReader();
            if(reader.HasRows) {
                // logic
            }
        } catch(SqlException) {
            throw;
        }
    }
}

物品必须附在&#39; &#39; (单引号)。

答案 1 :(得分:0)

您想要的SQL查询是

  

SELECT * FROM Table1 WHERE Column1 IN(&#39; ddd&#39;,&#39; aaa&#39;,&#39; fff&#39;,&#39; bbb&#39;)

您可以直接将数组解析为查询。你的帖子没有提到LINQ的任何内容,这会让它更容易。

答案 2 :(得分:0)

您可以将这些值作为Table Value Parameter传递到SP,然后将join传递给您在Column1上的表格。

Link: How to pass a TVP from C#