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

I'm using node-mssql 3.2.0 and I need to INSERT INTO a table and return the id of the inserted record.

I can successfully use sql.Transaction() to insert data, but the only parameters given to callbacks (request.query() and transaction.commit()) are:

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

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

So recordset is undefined for INSERT, UPDATE and DELETE statements, and affected is the number of rows affected, in my case 1.

Does anyone know a good way to obtain an inserted records id (just a primary key id) after a transaction.commit() using node-mssql..?



Solution 1:[1]

Instead of just doing an INSERT INTO... statement, you can add a SELECT... statement as well:

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

The SCOPE_IDENTITY() function returns the inserted identity column, which means recordset now contains the id:

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

I don't think request.multiple = true; is required, because although this includes multiple statements, only one of them is a SELECT... and so returns.

So the answer was SQL related and is not specific to node-mssql.

Solution 2:[2]

I know this question has accepted answer. I made the following way:

    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

This adds unique identifier to data that is saved to db (if table is created so)

create table itemTable(

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

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Stephen Last
Solution 2