节点 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
对于 INSERT
、UPDATE
和 DELETE
语句是 undefined
,affected
是受影响的行数,就我而言 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)
)
我正在使用 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
对于 INSERT
、UPDATE
和 DELETE
语句是 undefined
,affected
是受影响的行数,就我而言 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)
)