30/09/2018, 20:46
Trigger trong sql server
mình có 1 yêu cầu
tạo trigger k cho phép ng dùng nhập 2 vật tư có tên trùng nhau
mình làm như sau
USE KHACHHANG
GO
CREATE TRIGGER KT
ON TEST
FOR INSERT
AS
BEGIN
DECLARE @MAVT nvarchar(5)
SELECT @MAVT = MAVT
FROM inserted
IF EXISTS (SELECT * FROM TEST WHERE MAVT = @MAVT)
BEGIN
PRINT N'ERROR'
ROLLBACK TRAN
END
END
hoặc
USE KHACHHANG
GO
CREATE TRIGGER KT
ON TEST
FOR INSERT
AS
BEGIN
IF EXISTS (SELECT * FROM inserted WHERE TENVT IN
(
SELECT TENVT
FROM TEST
))
BEGIN
PRINT N'Không được chèn 2 vật tư có cùng tên'
ROLLBACK TRANSACTION
END
END
thì khi insert đều bị báo lỗi đã tồn tại tên trong bảng
sai chỗ nào nhỉ
xincamon
Bài liên quan
help me ,up help me
thay vì dùng
FOR INSERT
thì hãy dùngINSTEAD OF INSERT
và nội dung bên trong sau khi check nếu chèn đc thì thêm câu lệnh INSERT giá trị vào bảng.https://technet.microsoft.com/en-us/library/ms175089(v=sql.105).aspx?f=255&MSPPError=-2147217396
theo mình tìm hiểu thì trigger sẽ thực hiện chèn dữ liệu vào bảng cần chèn trước , rồi mới kiểm tra nên gây ra lỗi như thế
giờ phải làm sao nhỉ
cái INSTEAD OF INSERT mình k hiểu lắm
Mình hiểu đơn giản là INSTEAD OF INSERT nó sẽ thực hiện trước khi insert, còn cái kia ngược lại
lại linh tinh rồi.
INSTEAD OF là nó chặn cái INSERT lại (tức nó chặn lại và chả làm gì)
sau đó mình phải dùng lệnh insert trong trigger để insert lại