0

所以我得到了这个看起来像这样的触发器

CREATE TRIGGER trLoadingOvertime
ON trailerScheme
FOR UPDATE AS
IF (SELECT COUNT(*) FROM trailerScheme 
WHERE DATEDIFF(mi, trailerScheme.expectedFinishTime, trailerScheme.finishTime) > 15) > 0
BEGIN

INSERT INTO errorTable2
SELECT trailerSchemeID FROM inserted

END

在 BEGIN 和 END 之间,我需要将刚刚更新的 trailScheme 中的值插入 errorTable2 中。

我希望有一个人可以帮助我

更新:当我使用此代码时,它只会给我 NULL

DECLARE @id INT
SELECT
@id = deleted.trailerSchemeID
FROM
inserted
INNER JOIN
deleted
ON inserted.trailerSchemeID = deleted.trailerSchemeID

INSERT INTO errorTable2 VALUES(@id)
4

2 回答 2

0

我自己想通了。这是正确的代码:

DROP TRIGGER trLoadingOvertime
GO
CREATE TRIGGER trLoadingOvertime
ON trailerScheme
FOR INSERT AS
IF EXISTS (SELECT expectedFinishTime, finishTime
FROM inserted
WHERE DATEDIFF(mi, expectedFinishTime, finishTime) > 15)
BEGIN
DECLARE @id INT
DECLARE @exFTime DATETIME
DECLARE @fTime DATETIME
DECLARE @delay INT

SET @id = (SELECT trailerSchemeID FROM inserted)
SET @exFTime = (SELECT expectedFinishTime FROM inserted)
SET @fTime = (SELECT finishTime FROM inserted)
SET @delay = (SELECT DATEDIFF(mi, @exFTime, @fTime))

INSERT INTO errorTable VALUES(@id, @delay)

END

我试图插入,但问题是这个触发器是由更新调用的,因此插入的是空的。

于 2013-05-30T23:20:17.760 回答
0

你在找这个吗?

CREATE TRIGGER trLoadingOvertime
ON trailerScheme
FOR UPDATE AS
  INSERT INTO errorTable2
  SELECT trailerSchemeID 
    FROM inserted
   WHERE DATEDIFF(mi, expectedFinishTime, finishTime) > 15

这是SQLFiddle演示。

于 2013-05-29T22:31:11.190 回答