20 thg 3, 2009

Dùng TRIGGER thay cho CONSTRAINT CHECK

Các Table sử dụng ràng buộc CONSTRAINT CHECK để định dạng kiểu dữ liệu nhập vào như số Phone: 4444-123456 nếu ta nhập không đúng kiểu định dạng thì SQL sẽ trả lời 1 câu tiếng Anh thấy ghét (tại mình dở tiếng Anh) mà nhiều khi kiếm lỗi hoài mà không biết vì sao.

Vì vậy mình có thể tạo 1 TRIGGER dùng để kiểm tra lại cách đó nhưng mình sẽ ra 1 câu thông báo mà mình muốn cảnh báo cho người nhập sai kiểu định dạng dữ liệu.
Đầu tiên ta tạo 1 Table mà không dùng CONSTRAINT CHECK

CREATE TABLE Sinhvien
(
masv varchar(6) CONSTRAINT pk_masv PRIMARY KEY,
Tensv varchar(30),
Dienthoai varchar(15)
)
go


/*-- thay vì Dienthoai dung CONSTRAINT chk_DT CHECK (Dienthoai like'[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]'), thì sẽ chấp nhận kiểu dữ liệu nhập vào XXXX-YYYYYY ; X và Y là các số tu 0-9*/
Tạo 1 TRIGGER

CREATE TRIGGER trgcheckphone
ON Sinhvien
FOR INSERT, UPDATE
AS
BEGIN
DECLARE @dienthoai varchar(15)
SELECT @dienthoai= Dienthoai FROM Inserted
IF @dienthoai not like'[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]'
BEGIN
PRINT 'So dien thoai cap nhat phai dinh dang: XXXX-XXXXXX'
ROLLBACK TRANSACTION
END
END


Như vậy là ta có thể an tâm sử dụng cái trigger này để kiểm tra cách nhập dữ liệu của trường Dienthoai rồi. Thử nhập

INSERT Sinhvien VALUES('SV0001','Nguyen van A','1234-124512') --du lieu nay chap nhan
go
INSERT Sinhvien VALUES('SV0002','Tran van B','1234124512') --du lieu nay se khong chap

0 comments: