出于性能原因,我尝试使用Entity Frameworks 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-field的类型为decimal(28,6)
答案 0 :(得分:0)
将参数传递给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的值,并且将是十进制值,因此计算有效。