[英]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.