Mysql создать триггер синтаксическая ошибка используется DELIMITER $$ - PullRequest
0 голосов
/ 24 ноября 2018

Я пытался предотвратить дублирование значения в столбце с помощью этого кода, но получил синтаксическую ошибку:

, если существует (выберите * из tbl_baivietsp t 'в строке 1

DELIMITER $$
CREATE TRIGGER key_as_linksp ON tbl_baivietsp
AFTER INSERT
AS
if exists ( select * from tbl_baivietsp t inner join INSERTED i on i.LINK_SP 
LIKE CONCAT('%', t.LINK_SP ,'%'))
begin
  rollback TRANSACTION
  RAISERROR ('Duplicate Data', 16, 1);
end
go
$$
DELIMITER ;

Не знаю, в чем проблема в нерабочее время, спасибо, что уделили мне время!

1 Ответ

0 голосов
/ 24 ноября 2018

Вы написали триггерный код на TSQL (Microsoft SQL Server);Однако вы используете MySQL.Рекомендуется проверить документацию Trigger по адресу: https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html

DELIMITER $$

/* AFTER INSERT comes before the table name on which Trigger is being created */
CREATE TRIGGER key_as_linksp AFTER INSERT ON tbl_baivietsp

FOR EACH ROW BEGIN /* Instead of AS, Trigger block starts with FOR EACH ROW BEGIN */

  IF EXISTS ( select 1 from tbl_baivietsp t 
              inner join INSERTED i 
                on i.LINK_SP LIKE CONCAT('%', t.LINK_SP ,'%')) THEN /* THEN is missing */
      /* Throw Exception */
      SIGNAL SQLSTATE '45000' 
        SET MESSAGE_TEXT = 'Duplicate Data';
  END IF; /* we use END IF instead of END to end an IF block */

END $$  /* Trigger block ends with END clause */
DELIMITER ;

В случае MySQL мы используем SIGNAL .. SET MESSAGE_TEXT .., чтобы вызвать исключение внутри Trigger.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...