如果违反约束

时间:2015-04-22 13:50:23

标签: sql-server-2012

我想设置一个带有约束的表,但是当我插入记录时,我不想得到任何约束违规错误。我希望SQL能够悄悄地丢弃任何不唯一的记录,但继续插入那些可以插入的记录。

例如......

create table table1
(value1 int,
value2 int,
constraint uc_tab1 Unique (value1,value2)
)

create table table2
(value1 int,
value2 int
)

insert into table2 (value1,value2)
select 1,1
union all 
select 2,1
union all
select 3,1
union all
select 1,1

insert into table1
select value1,value2 from table2

目前,这将违反违规限制。我想压制该错误,以便table1包含...

1,1

2,1

3,1

(在这个例子中,我可以在table2上做一个分组,但在我的实际应用中并不是真的可行)

我依稀记得在几年前读过一些东西,但我可能已经想到了。这可能吗?

非常感谢提前

3 个答案:

答案 0 :(得分:1)

请不要这样做,你很容易丢失数据

而是尝试更改您的应用程序,以便它只插入有效数据,而不是丢弃不正确的数据

答案 1 :(得分:0)

您可以使用IGNORE_DUP_KEY index option,但我个人认为最好找到解决问题的其他方法。

您可以将其设置为ON,仅为违反唯一约束的插入行生成警告,而不是生成错误。

答案 2 :(得分:0)

当我创建约束时指定Ignore_Dup_Key就可以了。在上面的例子中,我将table1定义更改为....

创建表table1 (value1 int, value2 int, 约束uc_tab1唯一(value1,value2)WITH(IGNORE_DUP_KEY = ON) )

它完美无缺