Lỗi DML Trigger trong T-SQL ( SQL SERVER)
hế lu các anh , chị, bạn
mình có 1 yêu cầu như sau
VIẾT TRIGGER
`KHÔNG CHO PHÉP NGƯỜI DÙNG NHẬP VÀO 2 VẬT TƯ CÓ TENVATTU ( TÊN VẬT TƯ)
giống nhau
BẢNG VẬT TƯ
mình làm như sau
thì khi INSERT, dù TENVT đã tồn tại, hay là chưa tồn tại trong bảng VATTU, thì luôn bị lỗi ‘KHÔNG ĐƯỢC CHÈN 2 VẬT TƯ CÓ CÙNG TÊN’ nghĩa là điều kiện INSERT vào , trigger kiểm tra k hợp lệ
theo mình tìm hiểu thì tùy chọn FOR INSERT
nó sẽ chèn dữ liệu vào bảng VATTU trước rồi mới thực hiện kiểm tra điều kiện, nên luôn bị lỗi
mình chuyển sang dùng tùy chọn INSTEAD OF INSERT ( kiểm tra đk xong mới chèn )
thì k bị lôi khi chèn nữa, chèn bản ghi có đk sai thì nó báo lỗi như ý muốn,
USE KHACHHANG
GO
INSERT INTO VT(MAVT,TENVT) VALUES (‘0000’,‘XI MANG’) – (đã trung tên)
nhưng vấn đề là chèn bản ghi có đk đúng, TENVT chưa tồn tại trong bảng VATTU, nó cho phép chèn, nhưng khi chèn xong, xem dữ liệu trong bảng thì k có bản ghi vừa chèn, mặc dù sql vẫn thông báo …arow(s) affected …
USE KHACHHANG
GO
INSERT INTO VT(MAVT,TENVT) VALUES ('0000','XIMANG') -- không trùng tên
lỗi ở đâu nhỉ,mình đã refresh lại bảng như k thấy
xincamon
ủa, k có ai ta ?
up nao up nao up nao
cúc cu, cúc cu
bạn thử thêm vào cái INSTEAD OF
được rồi bạn, nhưng bạn cho mình hỏi, tại sao lại phải làm thế, mình tưởng dữ liệu trong bảng inserted, với những câu khác, mình đặt dk cho trigger kiểm tra, nếu k thỏa mãn thì rollback, còn thỏa mãn thì k làm gì, nó tự chèn vào, nếu trigger kt đk đúng thì sẽ tự thêm chứ, mình phải tự thêm à ?
với lại khi chạy nó báo 2 dòng …arow(s) affected
mặc dù chỉ co 1 bộ được chèn vào
INSTEAD OF INSERT mình dịch là thay vì INSERT thì nó sẽ thực hiện cái trong trigger của mình.[quote=“DwarfFungi, post:6, topic:26158”]
với lại khi chạy nó báo 2 dòng …arow(s) affected
[/quote]
cái này mình chưa hiểu sâu lắm nên không giải thích được.