我想直接在下一个插入中使用插入的序列号。
基于T-SQL脚本帮助:插入记录,然后在另一个语句上使用该插入的标识?我执行以下SQL查询:
DECLARE @Id1 BIGINT
DECLARE @Id2 BIGINT
INSERT INTO doses (CPS, ground, total) VALUES (10, 10, 10)
SET @Id1 = SELECT SCOPE_IDENTITY()
INSERT INTO places (x, y, z, speed) VALUES (10, 10, 10, 10)
SET @Id2 = SELECT SCOPE_IDENTITY()
INSERT INTO measurements (time, place, note, dose, id_dataset) VALUES ('Test', @Id1, 'test', @Id2, 17)
这给了我一个语法错误,DECLARE我找不到任何错误。
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE @Id1 BIGINT
DECLARE @Id2 BIGINT INSERT INTO doses (CPS, ground, total)' at line 1
看来MySQL中的DECLARE只能在BEGIN..END中使用。http://dev.mysql.com/doc/refman/5.0/en/declare.html
SCOPE_IDENTITY也将替换为LAST_INSERT_ID()。
这是我的新查询:
BEGIN
DECLARE @Id1 BIGINT;
DECLARE @Id2 BIGINT;
INSERT INTO doses (CPS, ground, total) VALUES (10, 10, 10);
SET @Id1 = (SELECT LAST_INSERT_ID());
INSERT INTO places (x, y, z, speed) VALUES (10, 10, 10, 10);
SET @Id2 = (SELECT LAST_INSERT_ID());
INSERT INTO measurements (time, place, note, dose, id_dataset);
VALUES ('Test', @Id1, 'test', @Id2, 17);
END
但是我仍然遇到同样的错误。
看来您不能在触发器/过程/函数或事件之外声明和使用变量。因此,您也不能仅通过编写BEGIN...END
它来解决此问题。
由于在一个选择语句中需要两个不同的ID值,您可以将其包装到存储过程中(这应该避免无法声明变量的问题),也可以MAX
在最终插入的两列中使用ID的-value -陈述。(这当然假设您auto_increment
在两个表中都启用了ID,或者至少使用了ID升序)
因此,从本质上讲,如果将整个代码替换为:
INSERT INTO doses (CPS, ground, total) VALUES (10, 10, 10);
INSERT INTO places (x, y, z, speed) VALUES (10, 10, 10, 10);
INSERT INTO measurements (time, place, note, dose, id_dataset)
VALUES ('Test', (SELECT MAX(ID) FROM doses), 'test', (SELECT MAX(ID) FROM places), 17);
您还应该将其包装在事务中,以确保在此期间未插入其他ID。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句