我想将一个包含20k ID的数组传递给我的存储过程参数,以便更新某个表。
我没有单独运行20k更新查询,而是想运行1个查询来更新所有查询,这样可以提高我的表现。
任何人都知道我可以将一个参数传递给我的存储过程吗?
我知道NVARCHAR(MAX)限制为8000个字符,是否有可能使用存储的proc param发送如此庞大的数据?
答案 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();
}