2015-07-21 3 views
0

У меня есть следующая процедура, которая заключается в том, чтобы добавить запись в таблицу, если ее еще нет в таблице.BEGIN INSERT INTO Ошибка процедуры SQL

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

+0

почему у вас есть как 'SQL-server' и' mysql' теги? – Kritner

ответ

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 
+0

«MySQL сказал: # 1064 - У вас есть ошибка в синтаксисе SQL, проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса, используемого рядом с« INSERT INTO gearLog »(код, signeeID, signoutDate, signbackDate, CommitteeOutID, в строке 8 " – user819640

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

+0

Ваш ответ компилируется правильно, но когда я отправляю запрос, я получаю следующую ошибку:« Операнд должен содержать 1 столбец » EDIT: Удаление скобок из инструкции select зафиксировано – user819640

+0

EDIT 2: Удаление кронштейны позволяют запрос работать без ошибок, но Подлимиты заготовки строки в таблицу. Я проверил, что правильные значения передаются в SQL запросе Eg 0 0000-00-00 NULL NULL – user819640

+0

Что вы подразумеваете под «пустым рядом»? У вас нет нулевых ограничений в вашей схеме, ваша таблица не позволит пустую строку. – Kritner