[英]Entity Framework ExecuteSqlCommand bulk update
出于性能原因,我试图使用实体框架ExecuteSqlCommand批量更新数据。 ctx.Database.ExecuteSqlCommand(updateQuery, new object[] {newValue} );
但是,我在设置表的值字段时遇到了麻烦。 它应该将现有值乘以一个因子,但是我收到以下错误:
附加信息:将数据类型nvarchar转换为数字时出错。
newValue = "Value * 56,25";
String updateQuery = @"UPDATE dbo.BudgetLine_type1_unpivoted set Value = {0} where valueTypeID='Value2' AND Dim2 in ('712','718','722') AND Dim4 = '110' AND Period = 1"
int noRowsAffected = db.Database.ExecuteSqlCommand(updateQuery, new object[] {newValue} );
将newValue设置为“ 1”或仅将“ Value”(不进行任何更改)设置时,效果很好
我应该如何进行乘法? 值字段的类型为小数(28,6)
将参数传递给ExecuteSqlCommand
行为与string.Format
,因此您的{0}
占位符不正确-您需要在此处设置SQL参数。
如果要始终将“ Value
乘以一定的数量,则该数量会发生变化,因此这是您需要传递的参数。 您只需要根据查询是否是乘法来调整查询,即set Value = Value * @p0
或set Value = @p0
。 我假设您的代码必须知道要设置的值以及是否要乘。
我会这样写,类似于MSDN中的描述示例:
decimal newValue = 56.25;
bool multiply = true;
String newValueSql = multiply ? "Value * @p0" : "@p0";
String updateQuery = @"UPDATE dbo.BudgetLine_type1_unpivoted set Value = " + newValueSql
+ " where valueTypeID='Value2' AND Dim2 in ('712','718','722') AND Dim4 = '110' AND Period = 1"
int noRowsAffected = db.Database.ExecuteSqlCommand(updateQuery, newValue);
运行查询时, @p0
将替换为newValue的值,并且将是十进制值,因此计算有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.