mysql - BEGIN INSERT INTO SQL 过程错误

标签 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 said: #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 'BEGIN INSERT INTO gearLog (code, signeeID, signoutDate, signbackDate, ' at line 7

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

这是它在 phpMyAdmin 中的样子 enter image description here

最佳答案

看来您已将一些 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 为 NULL

抱歉,我似乎无法获得正确的语法,并且 sqlfiddle 无法按照我尝试使用插入语句的方式很好地发挥作用。

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

关于mysql - BEGIN INSERT INTO SQL 过程错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31543483/

相关文章:

Php mysql - 获取最近几天的值和条目总数

sql-server - 如何将存储过程转换为 View ?

java 没有捕获 ms sql 存储过程引发错误

mysql - 减少mysql预订时间的存储过程

sql-server - TSQL 事务在语句后检查 @@ERROR 和 @@ROWCOUNT

python - 从 sqlalchemy 核心中的函数调用中选择列

php - 为 mysql 行使用标识符

mysql - 在可能存在空值的表上计算每 12 个月的累积值

mysql - 从 codeigniter 中的两个表中选择查询

mysql:查找具有多个标签和相同 id 的行