javascript - Node mssql : return id after SQL insertion

标签 javascript sql-server node.js package

我正在致力于 Mongodb 和 SQL Server 之间的集成,使用 mssql 将寄存器从 MongoDb 插入和更新到 SQL Server 数据库中包来实现这一目标。

每次插入新寄存器时,我都希望检索新的行 ID,因为我需要它来执行另一次子寄存器插入。

我尝试了以下操作,希望在查询结果中检索到一些信息。查询实际上插入了行,但是 result返回为 undefined :

var sql = require('mssql');
var connectionConfig = 'xxxxxxxxxxxx';
var insertionQuery =   'xxxxxxxxxxxx';

sql.connect(connectionConfig).then(pool => {
    pool
      .request()
      .query(insertionQuery);    

}).then(result => {
        //I expect 'result' to have information of the inserted row, but it comes undefined instead
        cosole.log(result);

}).catch(err => {
        console.err(err);
});

我认为使用存储过程可能会解决这个问题,但我只是想避免使用存储过程进行简单的插入。

有谁知道如何在插入后取回新的行 ID?

编辑

我确实包括了 OUTPUT SCOPE_IDENTITY()在我的 SQL 语句中 - 我的查询现在看起来像:

INSERT INTO TABLE (columns...) 
OUTPUT SCOPE_IDENTITY() 
VALUES (values...)

如果我在我的 SQL Server Management Studio 中运行查询,它工作得很好并且我得到了我的新行 ID,但是当通过 mssql 运行查询时包裹的 query方法,result像这样返回:

[ { '': null } ]

最佳答案

我引用自node-mssql insert returning undefined recordset :

INSERT statement doesn't return a recordset so recordset is undefined. Please see this section of the docs to learn more about how to get number of affected rows.

解决此问题的一个方法是在 INSERT 之后添加一个 SELECT 语句并请求 SCOPE_IDENTITY()@@身份。这将为您提供最后插入的对象的 ID,即:INSERT INTO table (...) VALUES (...);选择 SCOPE_IDENTITY() 作为 id;

关于javascript - Node mssql : return id after SQL insertion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46565526/

相关文章:

javascript - 为什么我只能评估 spookyjs (casperjs) 中的匿名函数

sql-server - Debezium:无法在 Kafka-Connect Docker 容器上设置观察者。获取关联 ID 为 2 的元数据时出错... LEADER_NOT_AVAILABLE

sql-server - 运行 ms sql local db express

javascript - 为什么我不能有两个互相执行的 .js 脚本?

javascript - 如何在 Jasmine 测试中放入调试器?

php - 在 javascript 或 php 函数中路由

javascript - 出现访问被拒绝错误

javascript - 如何让 React 与 Grunt 和 Babel 一起工作?

javascript - Kendo Grid 延迟初始化后绑定(bind)点击事件

sql - 使用 SQL Server 创建 XML