我有以下程序,如果表中没有记录,则将记录添加到表中。
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附近使用的语法 INSERT INTO gearLog(代码,signeeID,signoutDate,signbackDate,'第7行
我不知道该部分的语法错误。如果有人可以提供帮助,我会很感激。
以下是phpMyAdmin的外观
答案 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