SQL Server:触发INSERTED

时间:2014-12-08 14:20:59

标签: sql-server triggers

你能帮我解释为什么在这个触发器中不想阅读Inserted.StartSession?所有的名字都是正确的,但他只是没有看到这个插入的字段...

由于

ALTER TRIGGER massage.Eighthourswork
ON massage.tSchedule FOR INSERT
AS
BEGIN
   declare @DayPart datetime
   set @DayPart = INSERTED.StartSession
   --SET NOCOUNT ON

   IF (SELECT sum (cast(datepart(hour, SessionHours) as int)) 
       FROM massage.tSchedule
       WHERE Datepart(day,massage.tSchedule.StartSession) = Datepart(day, @DayPart)) = 8
      RETURN print 'Cant work more than  8 hours'
   End

1 个答案:

答案 0 :(得分:0)

INSERTED是一个(虚拟)表。你不能这样做:

set @DayPart = INSERTED.StartSession

你可以这样做:

set @DayPart = SELECT TOP 1 StartSession FROM INSERTED

但更好的方法是根本不使用变量,并加入IF(SELECT ...)语句中的inserted表。否则如果一次插入多行会发生什么?

相关问题