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

help me ,up help me :smile:

thay vì dùng FOR INSERT thì hãy dùng INSTEAD 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

1 Like

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

1 Like

:slight_smile:
:smile:
:sunny:

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

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?