将数组传递给存储过程

时间:2012-09-06 21:23:38

标签: sql sql-server stored-procedures

我想将一个包含20k ID的数组传递给我的存储过程参数,以便更新某个表。

我没有单独运行20k更新查询,而是想运行1个查询来更新所有查询,这样可以提高我的表现。

任何人都知道我可以将一个参数传递给我的存储过程吗?

我知道NVARCHAR(MAX)限制为8000个字符,是否有可能使用存储的proc param发送如此庞大的数据?

1 个答案:

答案 0 :(得分:1)

请改用Table Value Parameter。见Use Table-Valued Parameters (Database Engine)。 TVP正如其名称所暗示的那样:作为表格的参数。您从客户端代码为其分配了一个DataTable,并且该过程(或您的特殊SQL codE)将整个DataTable作为参数接收。这是MSDN复制的示例:

// Assumes connection is an open SqlConnection.
using (connection)
{
// Create a DataTable with the modified rows.
DataTable addedCategories = CategoriesDataTable.GetChanges(
    DataRowState.Added);

// Define the INSERT-SELECT statement.
string sqlInsert = 
    "INSERT INTO dbo.Categories (CategoryID, CategoryName)"
    + " SELECT nc.CategoryID, nc.CategoryName"
    + " FROM @tvpNewCategories AS nc;"

// Configure the command and parameter.
SqlCommand insertCommand = new SqlCommand(
    sqlInsert, connection);
SqlParameter tvpParam = insertCommand.Parameters.AddWithValue(
    "@tvpNewCategories", addedCategories);
tvpParam.SqlDbType = SqlDbType.Structured;
tvpParam.TypeName = "dbo.CategoryTableType";

// Execute the command.
insertCommand.ExecuteNonQuery();
}