sql - 如果约束失败,则插入值或忽略行

标签 sql sql-server foreign-keys bulkinsert batch-insert

在 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 约束的行。这样做的原因是因为插入语句是由程序生成的,所以事先不知道每个表上存在哪些外键。

最佳答案

您遇到的情况很奇怪,但您可以将值插入临时表,然后仅选择具有有效 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

关于sql - 如果约束失败,则插入值或忽略行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8151489/

相关文章:

sql - 'scale'这三个表怎么办?

sql - 提高属性/值表的数据库效率

sql - 何时向 SQL 表添加索引?

Java:数据库连接。我的错误在哪里?

mysql - 嵌套外键(多表)

MySQL 索引查询对特定列值花费很长时间

php - 如何将 base64 图像发送到服务器 - PHP

sql-server - 如何从 PyMSSQL 捕获异常

mysql - 具有外键约束的删除顺序,

mysql - 重置数据库无法删除或更新父行 : a foreign key constraint fails