PDA

View Full Version : Bạn nào có thể viết hộ mình cái Trigger không?



ccchua
10-08-2008, 14:20
Mình có 2 bảng a và b. Khi insert giá trị vào 1 trường soluong của bảng b thì nó tự động chèn thêm giá trị đó vào trường khohang của bảng a.

Vấn đề như thế thì đơn giản quá, mình đã làm được. Nhưng thêm 1 vấn đề khác là khi mình cập nhật lại soluong của bảng b thì trường khohang của bảng a lại tự cộng thêm toàn bộ cái số lượng vừa update đó. Làm thế nào để khi cập nhật lại trường soluong của b thì nó chỉ cộng hoặc trừ bớt cái số chênh lệch đó.

Nếu bạn giúp thì xin hãy viết trigger cụ thể hộ mình.

Tudt949
10-08-2008, 16:11
Cho Code cụ thể bạn đang làm đi ...
Nói vậy mơ hồ quá , ai giúp nổi!
:D

ccchua
10-08-2008, 16:28
CREATE TRIGGER trgInsertQOH
ON InventoryTransactions
FOR INSERT
AS
BEGIN
Declare @TransactionID char(6)
select @TransactionID = cTransactionID from inserted

DECLARE @ItemId char(6)
SELECT @ItemId = Inserted.cItemId from Inserted join Items
ON Inserted.cItemId = Items.cItemId

DECLARE @QuantityReceived numeric
SELECT @QuantityReceived = nQuantityReceived FROM Inserted
WHERE cTransactionID = @TransactionID
Begin
UPDATE Items
SET sQOH = sQOH + @QuantityReceived
WHERE cItemId = @ItemId
COMMIT TRAN
END
END


Đây là code mà tự động cập nhật khi insert.

ChungITT
11-08-2008, 17:44
Ít nhất cũng phải có cái cấu trúc của 2 bàng a và b chứ?

ccchua
12-08-2008, 00:35
Create table Items
(
cItemID char(6) not null constraint pk_item primary key,
cCategoryID char(6),
vItemName varchar(30) not null,
vDescription varchar(50) not null,
vSeries varchar(10),
mUnitPrice money,
sReorderLevel smallint,
sQOH smallint,
constraint fk_Cate foreign key(cCategoryID) references Categories(cCategoryID)
)
==================
Create table InventoryTransactions
(
cTransactionID char(6) not null constraint pk_Tran primary key,
cItemID char(6) not null,
cPurchaseOrderID char(6) not null,
dTransactionDate datetime default(getdate()),
vTransactionDescription varchar(50),
nQuantityOrdered numeric,
nQuantityReceived numeric,
mTotalAmount money,
Constraint fk_Item foreign key(cItemID) references Items(cItemID)
)


Để ý cái nQuantityReceived, khi insert và update thì nó phải tính toán và thêm vào sQOH bên bảng Items. mình mới chỉ làm được insert, còn khi update thì nó không tính lại được mà chỉ cộng thêm vào thôi.

mrPhanThanh
12-08-2008, 15:44
CREATE TRIGGER trgInsertQOH
ON InventoryTransactions
FOR INSERT,UPDATE,DELETE
AS
BEGIN
Declare @TransactionID char(6)
select @TransactionID = cTransactionID from inserted

DECLARE @ItemId char(6)
SELECT @ItemId = Inserted.cItemId from Inserted join Items
ON Inserted.cItemId = Items.cItemId

DECLARE @QuantityReceived numeric
SELECT @QuantityReceived = nQuantityReceived FROM Inserted
WHERE cTransactionID = @TransactionID
Begin
-- Tru bot gia tri cu
UPDATE Items SET sQOH = a.sQOH - del.nQuantityReceived FROM Items a JOIN deleted del ON a.cItemId = del.cItemId
-- Cong them gia tri moi
UPDATE Items SET sQOH = sQOH + @QuantityReceived WHERE cItemId = @ItemId
COMMIT TRAN
END
END