2015-12-02 4 views
0

У меня есть отношения между двумя объектами в моей базе данных. Поэтому, прежде чем создать одну строку нужно удалить строку в соотношении объекта, например, так:Azure SQL, перед запуском?

user    userHous 
id  1   1   2 

Так что, когда я удалить строку пользователя, он должен сделать, прежде чем триггер и удалить userHous.

в Mysql это было легко сделать с моим старым триггером:

USE `db`; 
DELIMITER $$ 
CREATE DEFINER=`user`@`ip` TRIGGER `BDEL` BEFORE DELETE ON `user` 
FOR EACH ROW 
begin 
    DELETE FROM user WHERE userid = OLD.userid; 
    DELETE FROM house WHERE userid = OLD.userid; 
end 

Я не уверен, как идти об этом с { FOR | AFTER | INSTEAD OF }

Я сделал это

CREATE TRIGGER [dbo].[Trigger] 
    ON [dbo].[user] 
    INSTEAD OF DELETE 
    AS 
    BEGIN 
     DELETE FROM userHouse WHERE userid = userid; 
     DELETE FROM user WHERE userid = userid; 
    END 

Но это просто удаляет все строки в обоих таблицах, я думаю, потому что я положил userid = userid. Как получить «параметр», который был в запросе, вызвавшем триггер?

ответ

0

Попробуйте

CREATE TRIGGER [dbo].[Trigger] 
ON [dbo].[user] 
AFTER DELETE 
AS 
DECLARE @user_id INT 
SELECT @user_id = (SELECT userid FROM DELETED) 
BEGIN 
    DELETE FROM userHouse WHERE userid = @user_id; 
END 
+0

не забудьте принять это как ответ, если он работает так, что будет также помочь людям, которые имеют ту же проблему – Ansel

Смежные вопросы