我需要将几个列表(大约 20000 个 id)发送到存储过程,如下所示:
1391924, 6546510, 7419635, 6599910, 6546888, 1116510, 6546720, ...
我有这个数据List<int>
如何将此列表发送到存储过程?
然后我需要在临时表上插入 id 的列表
我需要将几个列表(大约 20000 个 id)发送到存储过程,如下所示:
1391924, 6546510, 7419635, 6599910, 6546888, 1116510, 6546720, ...
我有这个数据List<int>
如何将此列表发送到存储过程?
然后我需要在临时表上插入 id 的列表
您可以使用:表值参数
表值参数是 SQL Server 2008 中的一种新参数类型。表值参数是使用用户定义的表类型声明的。您可以使用表值参数将多行数据发送到 Transact-SQL 语句或例程(例如存储过程或函数),而无需创建临时表或许多参数。
表值参数类似于 OLE DB 和 ODBC 中的参数数组,但提供了更大的灵活性并与 Transact-SQL 更紧密地集成。表值参数还具有能够参与基于集合的操作的好处。
例如。:
SQL 服务器:
创建表值参数:
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批量插入数据库。然后存储的过程可以从该表中读取。