CREATE TRIGGER RICheck ON Tour
AFTER INSERT, UPDATE
AS 
SET NoCount ON
IF Exists(SELECT * 
            FROM Inserted 
              LEFT OUTER JOIN BaseCamp
                ON Inserted.BaseCampID 
                   = BaseCamp.BaseCampID
            WHERE BaseCamp.BaseCampID IS NULL)
  BEGIN
    RAISERROR
      ('Inappropriate Foreign Key: Tour.BaseCampID', 16, 1)
    ROLLBACK TRANSACTION
    RETURN
  END我的理解是 存在符合要求的数据则回滚,不存在则执行,为什么实际执行效果和我的想法是反的呢?

解决方案 »

  1.   

    你这条SELECT * 
                FROM Inserted 
                  LEFT OUTER JOIN BaseCamp
                    ON Inserted.BaseCampID 
                       = BaseCamp.BaseCampID
                WHERE BaseCamp.BaseCampID IS NULL语句,只要Inserted 中有数据而BaseCamp中不存在都会成立,这样的话就是True了,我不知道你想实现什么功能!如果要实现只要BaseCamp中存在就回滚的话你可以改成SELECT * FROM BaseCamp As T Where T.BaseCampID = BaseCampID试试
      

  2.   

    你都没有放在事务里,rollback什么啊。
      

  3.   

    去掉 SET NoCount ON 或改为下面的试试 
    IF Exists(SELECT * 
                FROM Inserted where BaseCampID not in 
                  (select BaseCampID from BaseCamp))