【发布时间】:2016-07-04 14:44:24
【问题描述】:
我有一个由“LOAD DATA LOCAL INFILE”创建的临时表“teststepdump”。临时表包含了通过外键连接在一起的不同表的数据在表TestResult中:
- teststepdump (dummyno, stationno, name, result)
- duttest(ID、DUTID、processTime)
- dut(ID,DummyNr)
- 站(ID,站号)
- 测试步骤名称(ID、名称)
- teststepresult(DUTTestID,TeststepID,Result)
我正在使用存储过程尝试这种方式,但出现错误 1452:
SQL Fehler (1452):无法添加或更新子行:外键 约束失败(
database.teststepresult, CONSTRAINTteststepresult_ibfk_1外键 (DUTTestID) 引用duttest(ID) 更新级联删除级联)
BEGIN
DECLARE dt_id INT;
SELECT teststepresult.DUTTestID INTO dt_id FROM teststepresult
INNER JOIN duttest ON teststepresult.DUTTestID = duttest.ID
INNER JOIN dut ON duttest.DUTID = dut.ID
INNER JOIN station ON duttest.StationID = station.Nummer
INNER JOIN teststepdump ON teststepresult.ID = teststepdump.ID
WHERE
dut.DummyNr = teststepdump.dummyno AND
station.Nummer = teststepdump.stationno;
INSERT INTO teststepresult (DUTTestID, TeststepID, Result)
SELECT dt_id, teststepname.ID, teststepdump.Result
FROM teststepdump
INNER JOIN teststepname ON teststepdump.name = teststepname.name
WHERE
teststepname.name = teststepdump.name;
terminate teststepdump;
END
对于单个 INSERT,此存储过程对我有用,但我想避免“for”循环;:
BEGIN
DECLARE t_id INT;
DECLARE tn_id INT;
SELECT teststepname.ID INTO tn_id FROM teststepname
WHERE teststepname.Name = name;
SELECT duttest.ID INTO t_id FROM duttest
INNER JOIN dut ON duttest.DUTID = dut.ID
INNER JOIN station ON duttest.stationID = station.ID
WHERE
dut.DummyNr = dummyno AND
station.Nummer = stationno;
IF NOT t_id IS NULL AND NOT tn_id IS NULL THEN
INSERT INTO teststepresult (DUTTestID, TeststepID, Result)
VALUES (t_id, tn_id, Result);
END IF;
END
【问题讨论】:
-
你能告诉我们表
teststepdump的结构吗? (我的意思是创建sql代码) -
创建表
teststepdump(IDINT(11) NOT NULL AUTO_INCREMENT,dummynoBIGINT(20) NOT NULL DEFAULT '0',stationnoINT(11) NOT NULL DEFAULT ' 0',nameVARCHAR(50) NOT NULL DEFAULT '0' COLLATE 'utf8_bin',ResultTINYINT(4) NULL DEFAULT NULL, PRIMARY KEY (ID) -
好像没有外键...能不能把
teststepresult的结构展示一下? -
是的,teststepdump 没有外键。
-
teststepresult呢?
标签: mysql database stored-procedures