我在Sql server中有两个表
Table A: Id UNIQUEIDENTIFIER NOT NULL
Table B: Id UNIQUEIDENTIFIER NOT NULL
AId UNIQUEIDENTIFIER NOT NULL,ON DELETE CASCADE (This is Id of Table A)
(注意B的列AId引用A和ON DELETE CASCADE选项)。 B也有像
这样的删除触发器CREATETRIGGER B_Delete_Trigger
ON [dbo].[B]
FOR DELETE
AS
SELECT * FROM DELETED AS B INNER JOIN A ON B.AId=A.Id
现在,当我在表B上执行删除操作时,上面的触发器返回行,但是当打开时 表A没有返回任何内容。
我知道SQL Server首先从子表中删除记录(本例中为B),然后从父表(本例中为A)中删除记录,因此上述触发器应该在两种情况下都返回一些记录。
请告诉我如何访问父母记录,或者我的观察是错误的。
答案 0 :(得分:2)
实际上,当您在表A上调用此触发器时,执行顺序为
SELECT * FROM DELETED仅包含A表中的数据。
答案 1 :(得分:1)
“FOR”触发器相当于“AFTER”触发器。删除操作完成后触发器触发。因此,当删除触发器执行B时,表A中的记录已经消失。据我所知,没有简单的方法可以访问表A中的记录。
答案 2 :(得分:0)
on删除级联不应该在父表上吗?
这样做的目的是一旦父项被删除,提供其他表引用父项(通过FK约束),那么所有子项记录也将被删除。看起来你有错误的方式吗?
MSDN:
http://msdn.microsoft.com/en-us/library/aa933119(v=sql.80).aspx
答案 3 :(得分:0)
以下项目应注意:
trigger
以执行ON DELETE CASCADE
ON DELETE CASCADE
表示:当您从Parent表中删除项目时,所有项目都将从已删除引用的子表中删除。希望你有我,谢谢你的时间。