--****************TRIGGER*************
/*Viết trigger kiểm tra việc cập nhật ProductModelID cho bảng
Production.Product
nếu ProductModelID không tồn tại trong bảng Production.ProductModelID thì
thông báo “mã không tồn tại” và thực hiện rollback. Trường hợp mã tồn tại
thì đếm
có bao nhiêu ProductModelID cùng loại trên bảng Production.Product rồi
cập nhật
vào cột total_moid vừa mới thêm.*/
--THEM total_moid CHO BANG PRODUCTION.PRODUCT
ALTER TABLE Production.ProductModel ADD total_moid INT
--KIEM TRA THEM COT total_moid
SELECT * FROM Production.ProductModel
-CREATE TRIGGER KT_CAP_NHAT
ON [Production].[Product]
FOR UPDATE
AS
BEGIN
DECLARE @KT INT, @ProMoIDThem INT, @IDtam INT
SELECT @IDtam=ProductModelID FROM inserted
IF(UPDATE(ProductModelID))
BEGIN
SELECT @KT=COUNT(*) FROM Production.ProductModel WHERE
ProductModelID=@IDtam
IF(@KT=0)
BEGIN
PRINT 'MA KHONG TON TAI'
ROLLBACK TRAN
END
ELSE
BEGIN
SELECT @ProMoIDThem=COUNT(*) FROM Production.Product
WHERE ProductModelID=@IDtam
UPDATE Production.ProductModel SET
total_moid=@ProMoIDThem WHERE ProductModelID=@IDtam
END
END
END
-UPDATE [Production].[Product] SET ProductModelID='1' WHERE ProductID='1'
UPDATE [Production].[Product] SET ProductModelID='1' WHERE ProductID='2'
--KIEM TRA
SELECT ProductID, ProductModelID FROM Production.Product
SELECT ProductModelID, total_moid FROM Production.ProductModel
--Viết trigger đặt ten ghilog_trig để khi thao tác trên bảng
Production.Culture thông tin sẽ được ghi vào bảng trig_log
--TAO BANG TRIG_LOG
CREATE TABLE TRIG_LOG
(
ID INT IDENTITY(1,1) NOT NULL,
ID_THAO_TAC VARCHAR(6),
LOAI_THAO_TAC NVARCHAR(50),
THOI_GIAN SMALLDATETIME
)
--TAO TRIGGER
CREATE TRIGGER GHILOG_TRIG
ON [Production].[Culture]
FOR UPDATE, INSERT, DELETE
AS
BEGIN
DECLARE @ID1 VARCHAR(6), @ID2 VARCHAR(6)
SELECT @ID1=CultureID FROM inserted
SELECT @ID2=CultureID FROM deleted
IF(@ID1 IS NOT NULL AND @ID2 IS NOT NULL)
BEGIN
INSERT INTO [dbo].[TRIG_LOG] VALUES(@ID1,'UPDATE',GETDATE())
END
ELSE IF(@ID1 IS NOT NULL)
BEGIN
INSERT INTO [dbo].[TRIG_LOG]
VALUES(@ID1,'INSERT',GETDATE())
END
ELSE IF(@ID2 IS NOT NULL)
BEGIN
INSERT INTO [dbo].[TRIG_LOG]
VALUES(@ID2,'DELETE',GETDATE())
END
END
--THUC THI
UPDATE [Production].[Culture] SET Name='JKAD' WHERE CultureID='ACD'
INSERT INTO [Production].[Culture] VALUES ('ACD','AB',GETDATE())
DELETE [Production].[Culture] WHERE CultureID='ABC'
--KIEM TRA
SELECT * FROM Production.Culture