2017-04-24 6 views
0

値。 C#コードでアップデートは、私はこのコードが何をするか、C#で実行されるコードを持って

UPDATE CustomerUser 
       SET 
        LoginName = @LoginName, 
        UserName = @UserName,  
        IsActive = @IsActive, 
        IsDeleted = @IsDeleted, 
        DeletedDate = @DeletedDate, 
        Modified = CURRENT_TIMESTAMP() 
       WHERE ID = @CustomerUserID; 

、それはその後、LoginNameにとユーザー名の列にいくつかのconcat'ingを行います。

私は、遅いC#プロセスを、以下にあるような何かをするSQLステートメントに置き換えたいと思います。私は完全に狂っているかもしれないと思うものを考えるためにSQLについて十分に知っていますが、あなたが尋ねるまで知ることはありません。

UPDATE CustomerUser 
        SET 
         LoginName = select concat(login,uniqueid) from CustomerUser where id **this would be an ID that is in the IN() of parent query** 
         UserName = @UserName,  
         IsActive = @IsActive, 
         IsDeleted = @IsDeleted, 
         DeletedDate = @DeletedDate, 
         Modified = CURRENT_TIMESTAMP() 
        WHERE ID **IN(1,2,3,4, etc...)**; 
+0

あなたが適切なデータサンプルと期待される結果と質問更新してください – scaisEdge

答えて

1

に参加:

UPDATE CustomerUser 
SET LoginName = CONCAT(LoginName, UserName) 
-- Other fields, etc.. 
WHERE ID **IN(1,2,3,4, etc...)**; 

あなたがC#でこれをやっている場合は、私はSQLクエリ文字列ではなくEntity Frameworkを使用することをお勧めします。私はSQL Serverと、それを使用しましたが、MySQLでそれを使用する上での情報がここで説明されています

エンティティとUsing MySQL with Entity Framework

、あなたに更新するために、すべてのIDのリストを持つ関数を記述することによって、これを達成できましたparmeter:

void UpdateCustomerUsers(ICollection<int> ids) 
{ 
using (var context = new MyDbContext()) 
{ 
    var customerUsers = context.CustomerUsers.Where(cu => ids.Contains(cu.ID)); 

    foreach (var cu in customerUsers) 
    { 
     cu.LoginName = cu.LoginName + cu.UserName; 
     cu.Modified = DateTime.Now; 
     // and so on... 
    } 

    context.SaveChanges(); 
} 
} 
+0

これをしなかった開発者は、生のインラインSQLを選択しましたが、私はに移動したり、ちょうど今のインラインSQLを更新するyのないように注意してくださいこの全体のプロセスは既に書き直しが予定されていますが、パフォーマンスを改善する必要があります。 – ChampChris

0

あなたがしてアップデートを使用することができますが、SELECTサブクエリを削除し、ちょうど行うには、あなたのクエリを変更することができます

UPDATE CustomerUser as t1 
    INNER JOIN ( 
      id from CustomerUser WHERE ID IN(1,2,3,4, etc...) 
) t2 on t1.ID=t2.id 
    SET 
     LoginName = select concat(t1.login, t1.uniqueid) 
     UserName = @UserName,  
     IsActive = @IsActive, 
     IsDeleted = @IsDeleted, 
     DeletedDate = @DeletedDate, 
     Modified = CURRENT_TIMESTAMP() 
関連する問題