我遇到了一些 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 into pageContentCache (objectId, contentData)
select distinct objectId, content
from #contentcache
不明白为什么会有重复项,因为正如您所提到的,您的 select 语句中没有联接。无论如何,我的猜测是,distinct 关键字将确保消除重复项。
关于sql - 没有连接的插入语句会导致先前不存在重复项的重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21881933/