我有以下过程,如果表中没有记录,则将记录添加到表中。
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