将数组快速传递到sql(express / mssql / react)

时间:2020-02-18 15:36:03

标签: javascript sql express

我正在尝试将两个数组上载到我的sql数据库中。 这就是我想出的。(这是使用来自客户端的端点的server.js)

我的快递

app.post("/post-question-answers", async (req, res) => {
  console.log("!called");
  try {
    await sql.connect(config);

    // create Request object
    var request = new sql.Request();

    let results = req.body.results;

    let questions = [];
    let answers = [];

    results.forEach(element => questions.push(element.question));
    results.forEach(element => answers.push(element.answer));

    for (var i = -1; i < results.length; i++) {
      request.input("Question", sql.VarChar, questions[i]);
      request.input("Answer", sql.VarChar, answers[i]);
      request.execute("dbo.AddQuestionResponses", function(err, recordset) {
        if (err) console.log(err);
        // send records as a response
        res.json(recordset);
      });
    }
  } catch (e) {
    console.log(e);
  }
});

我的sql存储过程

alter procedure AddQuestionResponses
@Question nvarchar (50),
@Answer nvarchar (50)


as 

insert into QuestionResponses(QuestionWhenAnswered, QuestionResponse)
values (@Question ,@Answer )




但是这会抛出

RequestError: The parameter name Question has already been declared. Parameter names must be unique

我相信这是因为

  request.input("Question", sql.VarChar, questions[i]);
      request.input("Answer", sql.VarChar, answers[i]);

必须是唯一的,并且因为它们处于for循环中,所以它们在语句中重复。有没有一种方法可以使它成为数据库的有效事务,并且使它们唯一。

谢谢您的时间:)

1 个答案:

答案 0 :(得分:0)

我通过放置

解决了这个问题
var request = new sql.Request();

在for循环中。