我有一个整数List<int> lstIds
的列表。现在,我想将所有这些ID
添加到临时表中。
我知道一些不同的方法,例如使用SqlCommand
参数,这将需要进行多个数据库调用,这是不可取的。另外,我也不想使用存储过程。
那么,是否可以将整个List
插入到临时表中?如果是,那怎么办?
注意:使用LINQ
的解决方案也可以。
编辑:有人将其标记为this问题的重复项,而在给定的问题中,他们将DataTable
作为临时表,而在这里我要将数据存储在SQL Server临时表中。
答案 0 :(得分:1)
当您想使用ADO.NET将某种数组数据传递到SQL Server 2008或更高版本时,可以定义并使用表值参数:
"/onboarding"
然后您可以在C#代码中执行以下操作:
CREATE TYPE integer_list_tbltype AS TABLE (n int NULL)
有关更多信息,请参阅Erland Sommarskog的文章:http://www.sommarskog.se/arrays-in-sql-2008.html
答案 1 :(得分:1)
您没有提到正在使用哪个版本的SQL Server ...,但是假设它是当前版本,则可以使用STRING_SPLIT函数: https://docs.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql?view=sql-server-2017
本质上,将值列表转换为带分隔符的字符串。将其发送并拆分。理想情况下,您应该使用表类型,但这可能适合您的需求
SQL代码
DECLARE @Array NVARCHAR(MAX) = '0,1,2,3,4,5,6,7,8,9,10';
DECLARE @TemporaryTable TABLE (
[Value] INT
);
INSERT INTO @TemporaryTable ( [Value] )
SELECT CONVERT(INT, [value]) FROM STRING_SPLIT(@Array, ',');
SELECT [Value] FROM @TemporaryTable
List<int> lstIds = new List<int>() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
C#代码
List<int> lstIds = new List<int>() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
使用(变量连接=新的SqlConnection(“数据源=本地主机;初始目录=正在测试;集成安全性=真实;”)) { connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandText = @"CREATE TABLE #TemporaryTable ( [Value] INT );";
command.CommandType = System.Data.CommandType.Text;
command.ExecuteNonQuery();
}
using (var command = connection.CreateCommand())
{
command.CommandText = @"INSERT INTO #TemporaryTable ( [Value] ) SELECT CONVERT(INT, [value]) FROM STRING_SPLIT(@Array, ',');";
command.CommandType = System.Data.CommandType.Text;
command.Parameters.Add(new SqlParameter("@Array", string.Join(",", lstIds)));
command.ExecuteNonQuery();
}
using (var command = connection.CreateCommand())
{
command.CommandText = @"SELECT COUNT(1) FROM #TemporaryTable";
command.CommandType = System.Data.CommandType.Text;
int count = Convert.ToInt32(command.ExecuteScalar());
}
}
答案 2 :(得分:-1)
您必须使用linq
。
通过创建数据上下文
Using(Datacontext dc = new Datacontext())
{
foreach(int id in lstIds.Items)
{
temp.Add(id);
}
dc.SubmitChanges();
}
您的DbContext类在temp
所在的位置