Node.js和MSSQL存储过程

3

2
是的,它确实提到了存储过程。在您提供的网页中使用Ctrl+F搜索即可。 - jazzytomato
3个回答

11

这个链接的文档确实提到了存储过程:

var request = new sql.Request(connection);
    request.input('input_parameter', sql.Int, 10);
    request.output('output_parameter', sql.VarChar(50));
    request.execute('procedure_name', function(err, recordsets, returnValue) {
        // ... error checks

        console.dir(recordsets);
    });

我不确定回答这个问题是否明智,但对于未来的读者/谷歌搜索者可能是有价值的。


我的错,感谢您的时间。 - user2896521
嗨,@david Mulder。我正在尝试执行一个不接受任何参数但返回一个表的存储过程。为了获得响应,应该进行哪些更改? - freshtoUI
那么你如何检查返回值呢?我尝试了以下两种方式: var parm = request.output('output_parameter').value 和 var parm = request.output('output_parameter').value,但是得到的结果是 [object] 或者 undefined。 - NealWalters
1
使用返回值:https://dev59.com/VMHrs4cB2Jgan1znqYvU - NealWalters

4

随着ES6/7对JS的增强,它正在变得越来越好。这是您可以使用async/await实现的方式:

async function getDataFromProcedure(dbConfig, procedureName) {
  try {
    await sql.connect(dbConfig);
    const request = new sql.Request();
    recordsets = await request.execute(procedureName);
    return recordsets[0];
  } catch (error) {
    // handle error here
  }
};


0

异步/等待的替代语法。我喜欢.then()格式。

return await this.sqlConnectionPool.connect().then(async (pool) => {
  return await pool
    .request()
    .input("UserID", sql.Int, id)
    .execute("spADF_User_Get")
    .then((result) => {
      if (result.recordset && result.recordset.length === 1) {
        return result.recordset[0];
      } else {
        //Something bad happened
      }
    });
});

为什么要混合两者?我只在必要时这样做,比如将基于事件的库转换为 Promise。这似乎可以工作,但会让人困惑,不知道在哪里设置断点,而 @vitkon 的答案则直接进行(只要是单个请求)。 - ps2goat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接