在SQL Server 2008中,是否有一种方法可以插入行,同时省略导致外键约束失败的行?
。我有一个类似这样的插入语句:
insert into tblFoo(id, name, parent_id, desc) values
(1, 'a', 1, null),
(2, 'c', 3, 'blah'),
....;
parent_id是另一个表的fk。我怎么能让sql服务器跳过行上的fk列是无效的?
Update我想让它自动工作,而不必首先过滤掉那些违反fk约束的行。这是因为插入语句是由程序生成的,所以事先不知道每个表上存在哪些外键。
这是一种奇怪的情况,但您可以将值插入临时表,然后仅选择具有有效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
一种方法是在insert和Updates上使用而不是触发器。然后,您可以在实际写入DB之前计算要更新的每一行。我一般不太喜欢触发器,但您这里似乎有一个不寻常的要求。