构建SQL“;其中在“;语句

本文关键字:语句 构建 SQL | 更新日期: 2023-09-27 17:58:32

我有一个List(Of String),它对应于数据库表上的"类型"。

我们正在使用DB2ADO.NET提供程序,我的最终查询需要如下所示:

select * from table where type in (@type1, @type2, @type3, @type4)

过去,我使用ForEach循环构建了查询参数/主机变量的列表,但我真的很想找到一种在一行中构建它们的方法。当然,我可以连接所有的字符串,但添加"@"和递增数字会让我头疼。

有人知道怎么做吗?

构建SQL“;其中在“;语句

这样的东西行得通吗?

var inList = "(" + string.Join(", ", typeList.Select(t => "@" + t)) + ")";

编辑

根据你的评论,这个怎么样?

var inList = "(" + 
    string.Join(", ", Enumerable.Range(1, argCount).Select(i +> "@type" + i)) +
    ")";

这就是我通常做的方式

string.Join(",", items.Select(i => $"'{i}'");
string dbCommand = 
    string.Format("select * from table where type in ({0})", string.Join(",", typeList.Select(p => "@" + p));

使用作为string.Join(",", listType.ToArray()) 拆分列表

    string types = string.Join(",", listType.ToArray());
    Select * from table where type in (types)

一个简单的方法可以使用:

"'" + string.Join("','", myListOfNames) + "'")

SQL/ADO.NET不支持数组。因此,您必须手动构建SQL。

SQL 2008确实支持Table参数,但它似乎有很多开销。看见http://www.sommarskog.se/arrays-in-sql-2008.html了解更多详细信息。