假设我有一个名为“Names”的表
ID | Name
---+--------------
1 | Bob
2 | Billy
3 | James
4 | John
5 | Tom
and on and on with thousands of names...
假设我编写了以下.net代码来检索名称:
public DataSet selectFromNames()
{
const string SQL_STATEMENT =
@"SELECT Id, Name From Names;";
Database db = EnterpriseLibraryContainer.Current.GetInstance<Database>("MyConnection");
DbCommand command = db.GetSqlStringCommand(SQL_STATEMENT);
command.CommandType = CommandType.Text;
command.CommandText = SQL_STATEMENT;
DataSet ds = db.ExecuteDataSet(command);
return ds;
}
工作正常。如果我想要一个具有整数数组参数的函数,该参数指定了我想要检索的名称的行,该怎么办?我该如何撰写该查询?
我熟悉将参数传递为@parameter
,但我不知道如何使用字符串构建器传入一个数组来编写像where ID in (1,2,3)
这样丑陋且容易出错的内容。
答案 0 :(得分:0)
建议使用SQL Server UDF来帮助您。这是一个article explaining how to implement this。
基本上你要创建一个UDF来将varchar()
拆分成表变量。我们称之为dbo.MySplit()
。
然后你可以:
string sql = "SELECT * FROM Table WHERE ID IN (SELECT Item FROM dbo.MySplitUDF(@csv));";
cmd.CommandText = sql;
cmd.Parameters.AddWithValue("@csv", string.Join(",",myIntegerArray);
答案 1 :(得分:0)
这个怎么样(使用LINQtoSQL)?
//...
int[] idList = new int[] { 1, 2, 3, 4 };
var myNames = from n in db.Names
where idList.Contains(n.ID)
select n;