BEGIN
RAISERROR('违背了数据的一致性.' ,16,1)
ROLLBACK TRANSACTION
END 你这个逻辑....

解决方案 »

  1.   

    是BEGIN 和END之间有问题吗,还是上面的语句有问题?如果在成绩表中存在相应的课程号,则ROLLBACK,不执行删除
      

  2.   

    SELECT  *   FROM  deleted  a
    WHERE   a.KCH IN (SELECT b.KCH FROM XSKC  b) 
    你这个是干啥?把不符合条件的选出来?下面这个BEGIN..END是无条件肯定要执行的,你还能删数据吗?
    BEGIN
    RAISERROR('违背了数据的一致性.' ,16,1)
    ROLLBACK TRANSACTION
    END 
      

  3.   

    我是想,如果select中有值,就ROLLBACK TRANSACTION,请问应该怎么写?
      

  4.   

    IF exists(SELECT  *   FROM  deleted  a WHERE   a.KCH IN (SELECT b.KCH FROM XSKC  b))
    BEGIN
    RAISERROR('违背了数据的一致性.' ,16,1)
    ROLLBACK TRANSACTION
    END应该没什么问题吧!不过这样把符合删除条件的数据也保留了
    我觉得可以先删除数据,然后再Deleted表里边把违背数据一致性的数据重新插入回去
      

  5.   

    我是说不管符不符合先都DELETE然后用After Delete触发器把不符合删除要求的数据重新插回去
    也就是要CREATE TRIGGER [CheckKC] ON [dbo].[KC] 
    AFTER DELETE 
    AS
    INSERT INTO [dbo].[KC] (x,y,z)
    SELECT  x,y,z  FROM  deleted  a
    WHERE   a.KCH IN (SELECT b.KCH FROM XSKC  b) 
    x,y,z用你表中的字段代替