解决方案 »

  1.   

    --delete BaseInfo where Id=2--加不加这一条都没效果(主键)
    要删除BaseInfo的行,应该加上删除语句,但你这条语句有问题,应该是id=@id,而不是id=2
    DELETE FROM [dbo].[BaseInfo] WHERE Id=@id
    可能还有其它关联表,导致主表删除失败,你先不加触发器, 直接执行删除语句看能否成功?
    DECLARE @id int
    SET @id=2
    DELETE FROM [dbo].[OwnerInfo] WHERE CarID=@id
    DELETE FROM [dbo].[InsuranceForm] WHERE InsuredId=@id
    DELETE FROM [dbo].[BaseInfo] WHERE Id=@id另外,你原来这种写法,如果一条语句删除多行的,就会有问题,例如
    DELETE FROM [dbo].[BaseInfo] WHERE Id IN (1,2,3,4)
    建议改成支持多行的写法
      

  2.   

    把instead of delete
    修改为: after delete
      

  3.   

    你先把instead of delete改为after delete,然后在最后加一句,insert into BaseInfo select *  from  deleted where Id=@id可以么
      

  4.   

    instead of delete  是替代TR, 也就是说,你删除数据时,只执行这个TR里语句,对于原语句,就不执行了。所以你要手工的加上这一句。也可以 按 2# 3# 的方法,把 instead of delete 改 成 after 就可以了。PS : 你这个 TR 有个最大的问题,就是没有考虑一次删除多条数据的场景;