SELECT * FROM deleted a WHERE a.KCH IN (SELECT b.KCH FROM XSKC b) 你这个是干啥?把不符合条件的选出来?下面这个BEGIN..END是无条件肯定要执行的,你还能删数据吗? BEGIN RAISERROR('违背了数据的一致性.' ,16,1) ROLLBACK TRANSACTION END
我是想,如果select中有值,就ROLLBACK TRANSACTION,请问应该怎么写?
IF exists(SELECT * FROM deleted a WHERE a.KCH IN (SELECT b.KCH FROM XSKC b)) BEGIN RAISERROR('违背了数据的一致性.' ,16,1) ROLLBACK TRANSACTION END应该没什么问题吧!不过这样把符合删除条件的数据也保留了 我觉得可以先删除数据,然后再Deleted表里边把违背数据一致性的数据重新插入回去
我是说不管符不符合先都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用你表中的字段代替
WHERE a.KCH IN (SELECT b.KCH FROM XSKC b)
你这个是干啥?把不符合条件的选出来?下面这个BEGIN..END是无条件肯定要执行的,你还能删数据吗?
BEGIN
RAISERROR('违背了数据的一致性.' ,16,1)
ROLLBACK TRANSACTION
END
BEGIN
RAISERROR('违背了数据的一致性.' ,16,1)
ROLLBACK TRANSACTION
END应该没什么问题吧!不过这样把符合删除条件的数据也保留了
我觉得可以先删除数据,然后再Deleted表里边把违背数据一致性的数据重新插入回去
也就是要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用你表中的字段代替