DECLARE的语法错误

米兰

我想直接在下一个插入中使用插入的序列号。

基于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

但是我仍然遇到同样的错误。

DrCopyPaste

看来您不能在触发器/过程/函数或事件之外声明和使用变量因此,您也不能仅通过编写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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章