1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| CREATE TABLE TEST
(
ID TINYINT IDENTITY CONSTRAINT PK_TEST PRIMARY KEY,
val TINYINT NOT NULL,
estSupprimable BIT NOT NULL CONSTRAINT DF_TEST_estSupprimable DEFAULT 0
)
GO
-- Seul 5 est supprimable
INSERT INTO dbo.TEST(val) VALUES (1)
INSERT INTO dbo.TEST(val) VALUES (2)
INSERT INTO dbo.TEST(val) VALUES (3)
INSERT INTO dbo.TEST(val) VALUES (4)
INSERT INTO dbo.TEST(val, estSupprimable) VALUES (5, 1)
GO
SELECT *
FROM dbo.TEST
GO
CREATE TRIGGER TR_IOF_D_TEST
ON dbo.TEST
INSTEAD OF DELETE
AS
BEGIN
DECLARE @Err VARCHAR(256)
SELECT @Err = ISNULL(@Err, '') + CAST(val AS VARCHAR) + ', '
FROM DELETED
WHERE estSupprimable = 0
SET @Err = LEFT(@Err, LEN(@Err) - 1)
IF @Err IS NOT NULL
BEGIN
RAISERROR('Les valeurs "%s" ne sont pas supprimables', 16, 1, @Err)
END
-- Supprime tout de même les valeurs supprimables
DELETE FROM dbo.TEST
FROM dbo.TEST AS T
JOIN DELETED AS D ON T.ID = D.ID
WHERE T.estSupprimable = 1
END
GO
-- retourne l'erreur
-- Msg*50000, Niveau*16, État*1, Procédure*TR_IOF_D_TEST, Ligne*17
-- Les valeurs "1, 2, 3, 4" ne sont pas supprimables
DELETE FROM dbo.TEST
GO
-- la valeur 5 n'est plus dans la table
SELECT *
FROM dbo.TEST
GO |
Partager