我有以下过程,如果表中尚无记录,则将其添加到表中。
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 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 中的样子
最佳答案
看来您已将一些 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/