如何将大数组发送到存储过程

我需要向存储过程发送几个列表(大约20000个id),如下所示:

1391924, 6546510, 7419635, 6599910, 6546888, 1116510, 6546720, ... 

我在List上有这些数据

如何将此列表发送到存储过程?

然后我需要在临时表上插入id的列表

您可以使用: 表值参数

表值参数是SQL Server 2008中的新参数类型。表值参数是使用用户定义的表类型声明的。 您可以使用表值参数将多行数据发送到Transact-SQL语句或例程(例如存储过程或函数),而无需创建临时表或许多参数。

表值参数类似于OLE DB和ODBC中的参数数组,但提供了更多的灵活性,并与Transact-SQL更紧密地集成。 表值参数还具有能够参与基于集合的操作的益处。

例如。:

SQL Server:

创建表值参数:

  CREATE TYPE IDsTableType AS TABLE ( [Product] [varchar](10) NOT NULL ) 

将其传递给存储过程:

  CREATE PROCEDURE GetIDs ( @TableVariable IDsTableType READONLY ) AS BEGIN //Do Something END GO 

用于将表值参数传递给存储过程的C#代码:

 DataTable dataTable = GetData(); // Configure the SqlCommand and SqlParameter. SqlCommand cmd= new SqlCommand( "GetIDs", connection); cmd.CommandType = CommandType.StoredProcedure; SqlParameter tvpParam = cmd.Parameters.AddWithValue( "@TableVariable", dataTable); tvpParam.SqlDbType = SqlDbType.Structured; 

请参阅:将表值参数数据传递给存储过程

如果将数组写入DataTable,则可以将 DataTable 批量插入数据库。 然后存储的proc可以从该表中读取。