MySql не поддерживает триггеры INSTEAD OF
, что вам нужно использовать здесь. В SQL Server вы бы использовали триггер INSTEAD OF INSERT
, который сработает до того, как произойдет вставка, где вы можете написать проверку на дубликат. Однако, если вы можете избежать триггера, почему бы не использовать Stored Routine и просто проверить наличие дубликатов перед вставкой?
Это, конечно, если вы действительно не можете использовать ограничение.
Редактировать: Обновление ответа для MSSQL.
Вот пример прямо из MSDN :
CREATE TRIGGER IO_Trig_INS_Employee ON Employee
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON
-- Check for duplicate Person. If there is no duplicate, do an insert.
IF (NOT EXISTS (SELECT P.SSN
FROM Person P, inserted I
WHERE P.SSN = I.SSN))
INSERT INTO Person
SELECT SSN,Name,Address,Birthdate
FROM inserted
ELSE
-- Log an attempt to insert duplicate Person row in PersonDuplicates table.
INSERT INTO PersonDuplicates
SELECT SSN,Name,Address,Birthdate,SUSER_SNAME(),GETDATE()
FROM inserted
-- Check for duplicate Employee. If no there is duplicate, do an INSERT.
IF (NOT EXISTS (SELECT E.SSN
FROM EmployeeTable E, inserted
WHERE E.SSN = inserted.SSN))
INSERT INTO EmployeeTable
SELECT EmployeeID,SSN, Department, Salary
FROM inserted
ELSE
--If there is a duplicate, change to UPDATE so that there will not
--be a duplicate key violation error.
UPDATE EmployeeTable
SET EmployeeID = I.EmployeeID,
Department = I.Department,
Salary = I.Salary
FROM EmployeeTable E, inserted I
WHERE E.SSN = I.SSN
END
Вам, очевидно, нужно будет изменить / упростить ситуацию, но базовый контекст есть.