SQL Server 在一次调用中返回两次结果?

问题描述 投票:0回答:2

我已将 SQL Server 数据库连接到简单的 Node.js 服务器。当我运行代码时,我得到了记录集和返回给我的记录集。它们本质上都包含相同的数据。我可以使用这个,但它似乎多余,而且直接调用我需要的记录会更整洁。

我希望得到一个清晰的 ELI5 解释,因为

mssql
在我看来,npm 文档有点令人困惑。

下面是代码:

const express = require('express');
const cors = require('cors');
const sql = require('mssql');
const app = express();
const sqlServer = 'hasea\\SQLExpress'

const selectAllQuery = 'SELECT * FROM dbo.users';
const config = {
    user: 'nbar',
    password: 'nb',
    server: sqlServer,
    database: 'nirvanaBar'
}

// SQL Select function
function DBconn(query, res) {

    sql.connect(config, function (err) {
        if (err) console.log(err);
        var request = new sql.Request();

        request.query(query, function (err, row) {
            if (err) console.log(err)
            res.json({
                data: row
            })
        })
    })
}
app.use(cors());

app.get('/', (req, res) => {
    res.send("Hello from the server")
});

app.get('/users', (req, res) => {
    //query?
    //var andrew = "select * from dbo.users where firstName = 'Andrew';"
    var matt = "select * from dbo.users where firstName = 'Matt';"
    //DBconn(selectAllQuery,res);
    DBconn(matt, res);

})
app.listen(4000, () => {
    console.log(`Server started on port 4000`)
})

结果:

我可以看到这个问题之前已经被提出过,但我不明白发生了什么,文档也没有提供太多信息来说明为什么会出现这种情况。我可以使用数据,我只是认为返回记录集和记录集会更整洁。

提前致谢

javascript sql node.js express
2个回答
3
投票

这是 mssql 的预期行为,请查看文档这里。当您执行多个语句时,它允许您拥有多个记录集

您会注意到实际上有 2 个属性

记录集(单数) 和 记录集(复数)

recordset(单数)指的是执行的第一条语句。在你的情况下,你可以使用这个

recordsets(复数)是一组记录集,在您的情况下,数组中只有一个,因为您只运行一个语句。


0
投票

我阅读了几篇文章来解决这个问题。要仅传递记录集,只需执行以下操作 .recordset。

例如见下文。我的查询变量是结果,我只是使用“result.recordset”而不是“结果”,它给了我记录集和记录集。

`request.query('SELECT * FROM [castle_pod].[dbo].[item]', (err, result) => { if (err) console.log(err);

          // send data as response
          res.send(result.recordset);` 
© www.soinside.com 2019 - 2024. All rights reserved.