我遇到了一个问题,我创建了长度各异的数组。这些数组包含名称,现在我想在WHERE
查询中比较这些名称。
现在我正在考虑一个简单而好的解决方案,但我无法想到任何事情。
这是我想要做的一个例子:
array[?] names; //This is an array that holds names
sql Names = new SQLcommand("SELECT * FROM people WHERE name="the array names"",
_msConnection);
希望你有一个解决方案。
答案 0 :(得分:3)
SQL就像这样:
WHERE name IN ('name1', 'name2', 'name3')
如果你想以狡猾的方式构建那个SQL,那么你可能会这样做:
sql = String.Format("SELECT * FROM people WHERE name IN ('{0}')", String.Join("', '", names))
如果您想以正确的方式查看如何操作,click here。
答案 1 :(得分:2)
您可以将数组中的值列表作为单个列表传递。这是TVP。阅读更多here。
好处:你可以传递相同类型和可变长度的大数组,并且比字符串替换和其他黑客更安全。
首先创建一个类型。
CREATE TYPE dbo.CategoryTableType AS TABLE (
CategoryID int, CategoryName nvarchar(50))
然后使用此类型作为函数或SP的参数。
CREATE PROCEDURE usp_UpdateCategories (
@tvpNewCategories dbo.CategoryTableType READONLY)
在C#中,根据类型创建对象:
SqlParameter tvpParam =
command.Parameters.AddWithValue("@tvpNewCategories", dataReader);
tvpParam.SqlDbType = SqlDbType.Structured;
答案 2 :(得分:1)
尝试使用String.Replace()
string sql = "SELECT * FROM table_name WHERE name=$array$"
然后
sql = sql.Replace("$array$", array[index]);
为数组索引执行循环。
答案 3 :(得分:0)
让我们说'names'是一个数组或字符串您可以使用String.Join()方法 它将seperater和一个数组作为Input,并在数组中给出包含逗号分隔项的字符串。以下希望是有帮助的。
var commaSeperatedNames = string.join(',',names);
var query = "SELECT * FROM people WHERE name IN (" + commaSeperatedNames + ")";