【问题标题】:Is it possible to do a bulk update?是否可以进行批量更新?
【发布时间】:2009-06-29 21:13:30
【问题描述】:

可以批量更新吗?我做了一个构建插入,现在我想更新每个用户 ID 以增加计数。

这是我的构建插入示例

void updateMediaForSubscribers(long userId, long mediaId, Media_Base.Catagory cat, DateTime currentDate)
{
    command.CommandText =
        "INSERT INTO user_media_subscription (recipientId, mediaId, catagory) " +
        "SELECT watcher, @mediaId, @category " +
        "FROM user_watch WHERE watched=@watched;";
    command.Parameters.Add("@mediaId", DbType.Int64).Value = mediaId;
    command.Parameters.Add("@category", DbType.Int64).Value = cat;
    command.Parameters.Add("@watched", DbType.Int64).Value = userId;
    command.ExecuteNonQuery();

    //now I want to increase but this syntax is wrong
    //currently near "LEFT": syntax error
    //this is made up and shouldn't work.
    command.CommandText =
        "UPDATE user_data SET mediaMsgCount=mediaMsgCount+1 " +
        "LEFT JOIN user_watch AS w ON w.watcher=user_data.userId " +
        "WHERE w.watched=@watched;";
    command.Parameters.Add("@watched", DbType.Int64).Value = userId;
    command.ExecuteNonQuery();
}

【问题讨论】:

    标签: c# sql sqlite


    【解决方案1】:

    你需要使用“UPDATE ... WITH”

    UPDATE ud SET ud.mediaMsgCount = ud.mediaMsgCount + 1
    FROM user_data ud LEFT JOIN user_watch uw ON uw.watcher = ud.userId
    WHERE uw.watched = @watched
    

    看看http://www.bennadel.com/blog/938-Using-A-SQL-JOIN-In-A-SQL-UPDATE-Statement-Thanks-John-Eric-.htm

    【讨论】:

    • 嗯,我已经对其进行了调整,但我没有本地 SQL 服务器来测试它 - 现在下载它,这样我就可以确保它在一段时间内可以正常工作:-)
    • 我认为这段代码的问题是你不能在 UPDATE 子句中使用别名。
    【解决方案2】:

    试试这个 SQL:

    UPDATE user_data 
       SET mediaMsgCount = mediaMsgCount+1 
      FROM user_data 
      LEFT JOIN user_watch AS w ON w.watcher=user_data.userId 
     WHERE w.watched=@watched
    

    【讨论】:

      猜你喜欢
      • 2013-04-26
      • 1970-01-01
      • 2015-02-11
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      • 2014-06-12
      • 2019-01-18
      • 1970-01-01
      相关资源
      最近更新 更多