BEGIN INSERT INTO SQL过程错误

时间:2015-07-21 15:32:18

标签: mysql stored-procedures

我有以下程序,如果表中没有记录,则将记录添加到表中。

BEGIN 
    IF NOT EXISTS (SELECT * FROM gearLog 
                   WHERE code = @codeI
                   AND signeeID = @signeeIDI
                   AND signoutDate = @signoutDateI
                   AND signbackDate = NULL) 
    BEGIN 
        INSERT INTO gearLog (code, signeeID, signoutDate, signbackDate, committeeOutID, committeeInID, 

warningsGiven)
        VALUES (@codeI, @signeeIDI, @signoutDateI, NULL, @committeeI, NULL, 0) 
    END 
END

对于下表

enter image description here

但是当我提交它时,我收到以下错误:

  

MySQL说:#1064 - 你的SQL语法有错误;检查   手册,对应右边的MySQL服务器版本   在'BEGIN附近使用的语法           INSERT INTO gearLog(代码,signeeID,signoutDate,signbackDate,'第7行

我不知道该部分的语法错误。如果有人可以提供帮助,我会很感激。

以下是phpMyAdmin的外观 enter image description here

2 个答案:

答案 0 :(得分:1)

看起来您已在sql-server查询中添加了mysql种语法,这就是您遇到问题的原因。

您的查询可能更像:

INSERT INTO gearLog (code, signeeID, signoutDate, signbackDate, committeeOutId, committeeInID, warningsGiven)
SELECT *
from ( 
  SELECT @codeI as code, 
          @signeeIDI as signeeId, 
          @signoutDateI as signoutDate, 
          NULL as signbackDate, 
          @committeeI as committeeOutId, 
          NULL as committeeInId, 
          0 as warningsGiven ) as tmpTable
WHERE not exists (
    SELECT * 
    FROM gearLog 
    WHERE code = @codeI
        AND signeeID = @signeeIDI
        AND signoutDate = @signoutDateI
        AND signbackDate is NULL
) LIMIT 1;

更新了一些事情。我错过了内表中的select。另外 - 这可能是之前问题的一部分 - 我正在复制您的where子句信息,而您有AND signbackDate = NULL,您实际上需要检查null为AND signbackDate is NULL

很抱歉,我似乎无法正确理解语法,而且我试图使用它时,sqlfiddle与插入语​​句的效果不佳。

以下是有关完成您尝试执行的操作的更多信息,这些信息依赖于桌面上的唯一约束:MySQL INSERT INTO WHERE NOT EXIST

答案 1 :(得分:0)

BEGIN 
    IF NOT EXISTS (SELECT * FROM gearLog 
                   WHERE code = @codeI
                   AND signeeID = @signeeIDI
                   AND signoutDate = @signoutDateI
                   AND signbackDate = NULL) 

        INSERT INTO gearLog (code, signeeID, signoutDate, signbackDate, committeeOutID, committeeInID, 

warningsGiven)
        VALUES (@codeI, @signeeIDI, @signoutDateI, NULL, @committeeI, NULL, 0) 

END