2009-09-06 10 views
0

J'ai ci-dessous déclencheurboucle dans trigger SQL Server

ALTER TRIGGER [dbo].[DeleteUserData] 
ON [dbo].[site_users] 
AFTER DELETE 
AS 
BEGIN 
SET NOCOUNT ON; 

--delete user uploads 
update my_gallery set deleted=1 where un=(select un from deleted) and subdomain=(select subdomain from deleted) 

--delete user pms 
delete from pms where toUn=(select un from deleted) and subdomain=(select subdomain from deleted) 

--delete friends 
delete from friend_blocked_list where un=(select un from deleted) and subdomain=(select subdomain from deleted) 

FIN

il fonctionne très bien lorsque je supprime un utilisateur, mais si je supprime plus d'un utilisateur rendement des sous-requêtes plus d'un utilisateur dans le tableau supprimé et le déclencheur échoue.

Comment puis-je l'ajuster pour qu'il fonctionne lorsque je supprime plus d'un utilisateur à la fois?

J'ai pensé à la modifier comme ci-dessous. Est-ce correct?

Altered

--delete user uploads 
update my_gallery set deleted=1 where un in (select un from deleted) and subdomain in (select subdomain from deleted) 

--delete user pms 
delete from pms where toUn in (select un from deleted) and subdomain in (select subdomain from deleted) 

--delete friends 
delete from friend_blocked_list where un in (select un from deleted) and subdomain in (select subdomain from deleted) 

Certains peuvent se demander pourquoi ne pas ajouter des clés étrangères aux tables, mais les noms d'utilisateur unique dans leur sous-domaine

Répondre

0

Oui, c'est une façon. Il ne gérera pas les valeurs NULL dans les sous-requêtes, mais je pense que cela n'aura pas d'importance.

Vous pouvez également utiliser EXISTS (handles NULLs) and JOIN (question SO sur EXISTE/IN/JOIN)

S'il vous plaît noter: SQL est conçu pour gérer plusieurs lignes quand même ...