3

在 SQL Server 2008 中,有没有办法在插入行的同时忽略那些导致外键约束失败的行?

例如,我有一个类似于这样的插入语句:

insert into tblFoo(id, name, parent_id, desc) values 
(1, 'a', 1, null),
(2, 'c', 3, 'blah'),
....;

parent_id 是另一个表的 fk。然后我怎样才能让 sql server 跳过 fk 列无效的行?

更新我想让它自动工作,而不必先过滤掉那些违反 fk 约束的行。原因是插入语句是由程序生成的,因此事先不知道每个表上存在哪些外键。

4

2 回答 2

2

这是一个奇怪的情况,但您可以将值插入临时表,然后仅选择具有有效 FK 的值。

就像是:

declare @tempTable table (
    id int, 
    name nvarchar(50) ,
    parent_id int ,
    [desc] nvarchar(50) 
)

insert into @tempTable values
(1, 'a', 1, null),
(2, 'c', 3, 'blah')

insert into tblFoo(id, name, parent_id, [desc])
select tempTable.* from @tempTable as tempTable
inner join parent_id on parent_id.id = tempTable.parent_id
于 2011-11-16T12:21:16.887 回答
1

一种方法是在插入和更新上使用而不是触发器。然后,您可以在实际写入数据库之前评估正在更新的每一行。我通常不是触发器的忠实粉丝,但您似乎在这里有一个不寻常的要求。

于 2011-11-16T12:31:28.757 回答