节点 mssql 事务插入 - 返回插入的 id..?

node-mssql Transaction insert - Returning the inserted id..?

我正在使用 node-mssql 3.2.0,我需要 INSERT INTO 一个 table 和 return 插入记录的 ID。

我可以成功地使用 sql.Transaction() 插入数据,但是给回调(request.query()transaction.commit())的唯一参数是:

const request = new sql.Request();
request.query('...', (err, recordset, affected) => {});

const transaction = new sql.Transaction();
transaction.commit((err) => {});

所以 recordset 对于 INSERTUPDATEDELETE 语句是 undefinedaffected 是受影响的行数,就我而言 1.

有谁知道在 transaction.commit() 之后使用 node-mssql.. 获取插入记录 ID(只是主键 ID)的好方法?

您不仅可以执行 INSERT INTO... 语句,还可以添加 SELECT... 语句:

INSERT INTO table (...) VALUES (...); SELECT SCOPE_IDENTITY() AS id;

SCOPE_IDENTITY() 函数 returns 插入的标识列,这意味着 recordset 现在包含 id:

const request = new sql.Request();
request.query('...', (err, recordset, affected) => {});

我不认为 request.multiple = true; 是必需的,因为尽管这包括多个语句,但其中只有一个是 SELECT...,所以 returns。

所以答案是 SQL 相关的,并不特定于 node-mssql

我知道这个问题已经被接受了。 我做了以下方式:

    let pool = await sql.connect(config);
    let insertItem = await pool.request()
    .input('ItemId',sql.NVarChar, 'itemId1234')
    .input('ItemDesc',sql.NVarChar, 'nice item')
    .query("insert into itemTable (Id, ItemId,ItemDesc) OUTPUT INSERTED.ID 
    values (NEWID(), @ItemId, @ItemDesc);
    var insertedItemId = insertItem.recordset[0].ID

这会为保存到数据库的数据添加唯一标识符(如果 table 是这样创建的)

create table itemTable(

       Id UNIQUEIDENTIFIER primary key default NEWID(),
       ItemId nvarchar(25),
       ItemDesc nvarchar(25)
)