sql – 没有连接的插入语句导致重复,之前不存在重复项?

前端之家收集整理的这篇文章主要介绍了sql – 没有连接的插入语句导致重复,之前不存在重复项?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我遇到了一些sql的问题导致了我不希望的结果.我将来自各种表格的信息存储在另一个表格中,该表格用作网站上搜索页面的一部分.每个页面的所有页面数据以及其他页面上的其他元素(如日历等)的数据都在名为pageContentCache的表中引用.该表通常具有使用以下内容创建的索引:
alter table pageContentCache add
    constraint [IX_pageContentCache] PRIMARY KEY CLUSTERED (
        [objectId]
    )

由于某种原因,对我来说似乎是一个重复的objectId,这个软件的一个实例已经开始出现问题,导致以下错误

Msg 1505,Level 16,State 1 Procedure sp_rebuildPageContentCache,Line 50

The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name ‘dbo.pageContentCache’ and the index name ‘IX_pageContentCache’. The duplicate key value is (21912).

所以,为了调试这个问题,我已经得到了将要输入到pageContentCache表中的所有数据加载到临时表#contentcache中的过程,首先,我可以看看它.

这是我开始有点困惑的地方……

将数据插入#contentcache(有两列,objectId和content)后,我可以运行以下sql语句,它将不返回任何内容

select objectId,count(objectId) from #contentcache
group by objectId having count(objectId) > 1

这不返回任何记录.如果我然后运行以下sql

insert into pageContentCache (objectId,contentData)
    select objectId,content
    from #contentcache

这会将#contentcache中的所有数据插入到pageContentCache中,正如您所期望的那样.但是,如果我然后运行以下sql,它将返回重复项:

select objectId,count(objectId) from pageContentCache
group by objectId having count(objectId) > 1

然后返回重复项:

objectId     (no column name)
21912        2

没有触发器或与此表关联的任何类似的东西,而insert语句只是将数据从一个表复制到另一个表,所以…这个副本来自何处?

解决方法

请尝试以下方法
insert into pageContentCache (objectId,contentData)
    select distinct objectId,content
    from #contentcache

无法理解为什么你会有重复,因为你提到,你的select语句中没有连接.无论如何,我的猜测是,distinct关键字将确保删除重复项.

猜你在找的MsSQL相关文章