【发布时间】:2014-01-24 23:30:45
【问题描述】:
嗯,在 SQL Server 2012 中,我有一个表来跟踪......嗯,项目......的容量
基本上Storage表有Capacity和Filled列,Filled列每次Item表有变化都需要更新,但不能高于@987654326 @ 值或低于“0”。我试图把它全部放在一个触发器中......我希望到目前为止我有任何意义......这就是我试图做的,我认为只有在 INSERT 发生时才会激活触发器......
ALTER TRIGGER [dbo].[CapCheck]
ON [dbo].[Item]
AFTER INSERT, DELETE, UPDATE
AS
BEGIN
DECLARE @Amount int
DECLARE @S_ID int
SELECT @Amount = Amount, @S_ID = S_ID
FROM inserted
IF @Amount = NULL
BEGIN
SELECT @Amount = -(Amount), @S_ID = S_ID
FROM deleted
END
DECLARE @Filled int
DECLARE @Capacity int
SELECT @Filled = Filled, @Capacity = Capacity
FROM Storage
WHERE S_ID = @S_ID
SET @Filled = @Filled + @Amount
IF @Capcaity < @Filled OR @Filled < 0
BEGIN
ROLLBACK TRANSACTION
END
ELSE
BEGIN
UPDATE Storage
SET Filled = @Filled
WHERE S_ID = @S_ID
END
END
非常感谢任何建议,你们是最好的:D
【问题讨论】:
标签: sql triggers sql-update sql-server-2012