sql中的ignore语句_sql-server-2008 – 对于merge语句显然忽略了SQL Server的ignore_dup_key...

SQL Server 2008.

我有几段代码一起工作,效果很奇怪所以我决定分享.

我有一个包含电子邮件的表 – 为简单起见,假设有2列:

ID identity(1,1)int主键

email varchar(900)

此外,电子邮件列上还有一个唯一键,IGNORE_DUP_KEY = ON.

问题的另一方面是合并声明:

merge into dbo.email

using (

select distinct email t from #t

) p

ON t = email

when not matched by target then

insert (email) values (t);

值得注意的是,#t基本上是(为了这个查询的目的)一个带有电子邮件varchar(500)的列表.

令人惊讶的是查询失败:

“违反UNIQUE KEY约束’uq_email’.无法在对象dbo.email中插入重复键”

然而,这完美无缺:

insert into dbo.email (email) select email from #t

虽然我显然可以解决这个问题(无论如何插入语句更快,所以它是一种方法)我不知道为什么MERGE语句失败.任何想法,任何人?

编辑:完整用例:

步骤1:

create table #temp (

col1 varchar(500),

col2 varchar(500),

col3 varchar(500),

col4 varchar(500),

col5 varchar(500),

email varchar(500),

id int)

第2步:

出于多种目的,从CSV文件中填充#temp

第3步:

合并到dbo.email

使用(

从#temp中选择不同的电子邮件

)p

ON t =电子邮件

当没有与目标匹配时

插入(电子邮件)值(t);

第0步 – 为dbo.email创建脚本:

CREATE TABLE dbo.email (

id int identity(1,1) not null,

email varchar(900) null,

loaddate date default null,

constraint [PK__email__1111] PRIMARY KEY CLUSTERED

(

id asc

) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY,

CONSTRAINT [uq_email] UNIQUE NONCLUSTERED

(

EMAIL asc

)

) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = ON, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY

) ON PRIMARY

如果不给你数十亿字节的数据显然是一个问题,我就无法做得更多.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值