为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: 8.0
【操作系统】:Ubuntu 22.04
【CPU】: x86
【问题描述】*:需要在插入新纪录的同时获取新纪录主键 id
参考 mysql 的 协议:
成功后返回的报文中会带有 last_insert_id, 这个信息就是最新插入的记录的 id 值。
以 mysql nodejs 客户端为例子, insert 语句返回的结果的 insertId 就是新纪录的 id :
connection.query('INSERT INTO posts SET ?', {title: 'test'}, function (error, results, fields) {
if (error) throw error;
console.log(results.insertId);
});
pg 则可以通过 returning 来实现:
INSERT INTO users (firstname, lastname) VALUES ('Joe', 'Cool') RETURNING id;
DM8 如何实现这个效果呢?
文档中提到 DM8 也支持 return 和 returning 语句,但是例子都是存储过程和触发器的,单个语句执行会报错:
insert into roles (id, firstName, lastName, createdAt, updatedAt) values(null, 'xx', 'yy', now(), now()) RETURNING id;
*
第 1 行, 第 117 列[;]附近出现错误[-2007]:
语法分析出错.
已用时间: 0.404(毫秒). 执行号:0.
insert into roles (id, firstName, lastName, createdAt, updatedAt) values(null, 'xx', 'yy', now(), now()) RETURNING id into id;
第1 行附近出现错误[-5014]:无效的返回结果存储对象.
已用时间: 0.538(毫秒). 执行号:0.
DM8 单个 insert sql 语句可以实现在插入新纪录的同时获取新纪录的主键 id 吗?
create TABLE T1(C1 INT IDENTITY(1,1), C2 CHAR);
INSERT INTO T1(C2) VALUES('a');
INSERT INTO T1(C2) VALUES('b');
INSERT INTO T1(C2) VALUES('c');
COMMIT;
SELECT SCOPE_IDENTITY();