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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
| -- ===========
-- Paramétrage
-- ===========
SET NOCOUNT ON
-- ==================
-- Lien vers Database
-- ==================
use tempdb
Le contexte de la base de données a changé*; il est maintenant 'tempdb'.
-- ========================
-- Suppression Table 'test'
-- ========================
IF OBJECT_ID(N'dbo.test', N'U') IS NOT NULL
DROP TABLE dbo.test
-- =====================
-- Création Table 'test'
-- =====================
create table dbo.test (
id smallint identity(1, 1) NOT NULL,
quant integer NOT NULL,
date datetime NOT NULL,
constraint pk_test_id primary key clustered (id)
)
-- ==============================
-- Suppression Trigger 'modifier'
-- ==============================
IF OBJECT_ID(N'dbo.modifier', N'TR') IS NOT NULL
DROP TRIGGER dbo.modifier
-- ===================
-- Trigger 'modifier'
-- ===================
CREATE TRIGGER dbo.modifier
ON dbo.test INSTEAD OF insert, update
AS
BEGIN
IF NOT UPDATE(quant) RETURN
IF EXISTS ( SELECT * FROM deleted )
BEGIN
update dbo.test
set quant = coalesce(i.quant, 0)
from inserted as i
inner join dbo.test as t
on t.id = i.id
END
ELSE
BEGIN
insert into dbo.test (quant, date)
select coalesce(i.quant, 0) as quant, i.date
from inserted as i
left join dbo.test as t
on t.id = i.id
where t.id is null
END
END
-- =====================
-- Insertion dans 'test'
-- =====================
INSERT INTO test (quant,date) VALUES
(null,'2016-05-07 22:36:52'),
(2, '2016-05-12 15:00:23')
-- ================
-- Vidage de 'test'
-- ================
select * from test
id quant date
------ ----------- -----------------------
1 0 2016-05-07 22:36:52.000
2 2 2016-05-12 15:00:23.000
-- =======================
-- Mise à jour dans 'test'
-- =======================
UPDATE test set quant = null where id = 2;
-- ================
-- Vidage de 'test'
-- ================
select * from test
id quant date
------ ----------- -----------------------
1 0 2016-05-07 22:36:52.000
2 0 2016-05-12 15:00:23.000
-- =======================
-- On désactive le trigger
-- =======================
DISABLE TRIGGER dbo.modifier on dbo.test
-- ========================
-- On purge la table 'test'
-- ========================
truncate table dbo.test
-- =====================
-- Insertion dans 'test'
-- =====================
INSERT INTO test (quant,date) VALUES
(null,'2016-05-07 22:36:52'),
(2, '2016-05-12 15:00:23')
Message 515, niveau 16, état 2, serveur ORION\SQLEXPRESS, ligne 5
Impossible d'insérer la valeur NULL dans la colonne 'quant', table 'tempdb.dbo.test'. Cette colonne n'accepte pas les valeurs NULL. Échec de INSERT.
L'instruction a été arrêtée.
-- ================
-- Vidage de 'test'
-- ================
select * from test
id quant date
------ ----------- -----------------------
Appuyez sur une touche pour continuer... |
Partager