我正在致力于 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 sorecordset
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/