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

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


对于下表



但是,当我提交它时,出现以下错误:


  MySQL说:#1064-您的SQL语法有误;检查
  与您的MySQL服务器版本相对应的手册
  在'BEGIN附近使用的语法
          在第7行上,插入gearLog(代码,signeeID,signoutDate,signbackDate,'


我不知道那部分在语法上有什么问题。如果有人可以帮助,我将不胜感激。

这是它在phpMyAdmin中的外观

最佳答案

您似乎在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无法以我尝试使用它们的方式与insert语句配合使用。

这是有关依靠表格上唯一约束来完成您要完成的工作的更多信息:MySQL INSERT INTO WHERE NOT EXIST

10-04 15:27
查看更多