Javascript NodeJS数据库更新查询?

Javascript NodeJS数据库更新查询?,javascript,mysql,node.js,Javascript,Mysql,Node.js,当我使用这段代码时,它只更新数据库中第一个值。它在循环上不起作用;只有一行受影响。我想更新所有的行。如何从表中选择列值并将其更新为循环中的其他列值 异步循环方法:- function readData () { return new Promise (function(resolve,rejection){ conn.connect().then(function () { var request = new sql.Request(conn

当我使用这段代码时,它只更新数据库中第一个值。它在循环上不起作用;只有一行受影响。我想更新所有的行。如何从表中选择列值并将其更新为循环中的其他列值

异步循环方法:-

   function readData () {
      return new Promise (function(resolve,rejection){
        conn.connect().then(function () {
          var request = new sql.Request(conn);
          request.query('Select * FROM demo Order by id  ;', function (err, data) {
            if (err) { console.log(err) }
            else {
              try {
               resolve(data)
                conn.close();
              }
              catch (err) {
                console.log(err);
              }
              }
          });
        });
      });
    }

   function writedata() {
  return new Promise(function (resolve, rejection) {
    let count = 0
    asyncLoop(temp, function (item, next){
      asyncLoop(id,function(newitem,newnext){
      conn.close();
      conn.connect().then(function () {
        var request = new sql.Request(conn);
        console.log(item);
        console.log(newitem);
        request.input("language", sql.VarChar, item)
        request.input("id", sql.SmallInt, newitem)
        request.query('update demo set ru = @language where  id = @id ;', function (err, data) {
          if (err) {
            console.log(err)
          } else {
            try {
              count++
              conn.close();
              if (count == 4) {
                resolve(data)
              }
            } catch (err) {
              console.log(err);
            }
            next();
            newnext();
          }
        });
      });
    });
    });
  });
}



readData().then(function (data) {
  for (var i = 1; i < 5; i++) {
    temp.push(data['recordset'][i]['EN']);
    id.push(data['recordset'][i]['ID']);
  }
  writedata().then(function (data) {
    console.log(data);
  });
});

使用asyncloop更新了代码,但出现了一些循环问题

请尝试下面的代码,如果有任何错误,请通知我。另外,根据需要修改计数值:

    function writedata() {
        return new Promise(function (resolve, rejection) {
            let count = 0
            for (i = 0; i < 5; i++) {
                conn.close();
                conn.connect().then(function () {
                    var request = new sql.Request(conn);
                    console.log(temp[i]);
                    console.log(id[i]);

                    request.input("language", sql.VarChar, temp[i])
                    request.input("id", sql.SmallInt, id[i])
                    request.query('update demo set ru = @language where  id = @id ;', function (err, data) {
                        if (err) {
                            console.log(err)
                        } else {
                            try {
                                count++
                                conn.close();
                                if(count == 5)
                                   resolve()

                            } catch (err) {
                                console.log(err);
                            }
                        }
                    });
                });

            }

        });
    }

尝试下面的代码,我希望它有帮助

let updateData= []



let updateDataRows = async (tmp, identifier) => {
    console.log('updating row',tmp,identifier);
    conn.close();
    await conn.connect();
    let request = new sql.request(conn);
    console.log(tmp);
    console.log(identifier);
    request.input("language", sql.varchar, tmp)
    request.input("id", sql.smallint, identifier)
    let data = await request.query('update demo set ru = @language where  id = @id ;')
    conn.close();
    return data;
}
let writedata = async () => {
    let resData = await Promise.all(updateData.map(async (d) => {
        return await updateDataRows(d.temp, d.id)
    }));
    return resData;
}

readData().then(function (data) {
    for (var i = 1; i < 5; i++) {
        updateData.push({
            temp: data['recordset'][i]['EN'],
            id: data['recordset'][i]['ID']
        })
    }
    writedata.then(data => {

    }, err => {

    })
});
请尝试Asyncloop而不是for loop。下面是相同的语法

asyncLoop(ARRAY, function(item, next) {

    [Function/Operation block]
        next();
    }
});

}, function(error) {
    [Error Handling Block]
}); 

首先,使用另一个文件或全局对象来设置连接。然后打印sql查询并将其运行到phpmyadmin或其他要检查的内容中。在查询之前还要打印@id,这样我们就可以检查细节了。@Sagar我用第二种方法作为标题更新了代码,它也只更新了一个方法row@Sagar更新了代码,请检查它是否正常工作,它是否在控制台中打印未定义未定义您忘记将参数设置为函数。函数writedata,它应该是函数writeDataMP,id@DHIRAJKATEKAR我已经将数组作为全局变量,那么为什么选择参数呢?@DHIRAJKATEKAR请在问题中添加Check@Sagar代码不工作,在控制台中未定义它只是循环并在控制台和节点中打印值。请检查上面的代码一些小循环问题,看看是否可以纠正