Comment écrire ce triggersur pour SQL Server?

Supposons que j'ai une table my_table(id, x, y) . Je veux écrire un triggersur pour empêcher la mise à jour de y col et le mettre à une valeur non-null si x est déjà null . Comme SQL Server n'a pas de triggersur avant la mise à jour, comment cela peut-il être fait? Apparemment, nous pouvons utiliser un instead of triggersur à cet effet, mais comment pouvons-nous vérifier les valeurs anciennes et actuelles et décider si nous devrions triggersr une erreur ou laisser la mise à jour s'exécuter normalement?

Exemple:

Imaginons que nous ayons cette ligne dans la BD:

 1, null, null 

Alors ceci devrait échouer (augmenter l'erreur)

 update my_table set y = 'blah' where id = 1; 

Mais cela devrait réussir:

 update my_table set y = null where id = 1; 

Je sais que l'exemple n'est pas très significatif, mais il est semblable à ce que j'essaie d'accomplir.

Cela devrait fonctionner, mais je ne suis pas sûr de savoir quelles autres conditions de bord vous devez gérer:

 create table my_table (id int identity, x varchar(20), y varchar(20)) go CREATE TRIGGER tgNotNullYonMyTable ON my_table FOR UPDATE AS IF UPDATE(y) BEGIN IF exists ( select 1 from deleted d join inserted i on i.id = d.id where (dx is null or ix is null) and iy is null ) BEGIN RAISERROR ('Leave Y alone if x is null.', 16, 1) rollback tran END END go insert my_table values (null,null) go update my_table set y = 'blah' where id = 1; go update my_table set y = null where id = 1; 
 CREATE TRIGGER yxnull ON mytable FOR UPDATE AS IF UPDATE(y) BEGIN IF deleted.x is null and inserted.y is not null BEGIN RAISERROR ('Leave Y alone if x is null.', 16, 1) ROLLBACK TRANSACTION END END go