0

我有一个包含大约 50 列的表(子),其中大约 30 列在另一个表(父)中将一列作为 Id 引用。我希望当我更新 Id 时,子表中具有父值的所有列也将更新,并且当我从父表中删除行时,子表中的行设置为空。我的问题是如何从具有期望值的子表中获取列并更新它们。我看到了这个这个, 但我不知道如何将它们用于触发器。最简单/最好的方法是什么?

4

2 回答 2

1

您可能想看看FOREIGN KEY Constraints

外键 (FK) 是用于在两个表中的数据之间建立和强制链接的列或列组合。您可以通过在创建或修改表时定义 FOREIGN KEY 约束来创建外键。

在外键引用中,当保存一个表的主键值的一个或多个列被另一个表中的一个或多个列引用时,将在两个表之间创建一个链接。此列成为第二个表中的外键。

还可以查看创建和修改 FOREIGN KEY ConstraintsSQL FOREIGN KEY Constraint

另请查看级联参照完整性约束

通过使用级联参照完整性约束,您可以定义当用户尝试删除或更新现有外键指向的键时 SQL Server 执行的操作。

于 2013-08-15T07:52:18.150 回答
0

我终于找到了解决方案:

Create TRIGGER [dbo].[DeleteUser]

ON dbo.ParentTable

INSTEAD OF DELETE

AS 

BEGIN

    SET NOCOUNT ON;

 declare @Search varchar(200)

 select @Search=d.Id from deleted as d   

Declare @tablevar table(Id  nvarchar(200),ColName  nvarchar(200))

--FindStringAndReturnCols return the name of columns And Id's of rows that have value

insert into @tablevar(Id,ColName) exec FindStringAndReturnCols @Search

declare @Id nvarchar(200), @ColName nvarchar(200),@SqlQuery as nvarchar(max)

Declare c Cursor For Select Id,ColName From @tablevar

Open c

Fetch  c into @Id,@ColName


While @@Fetch_Status=0

 Begin

 set  @SqlQuery=''

 set @SqlQuery= 'update ChildTable set '+ @ColName +' = null where Id like N''%'+@Id+'%'''

   exec (@SqlQuery)

   Fetch  c into @Id,@ColName
End

delete from Parent where Id=@Search

Close c

Deallocate c

END
于 2013-08-16T20:46:58.770 回答