insert into 无法插入所选数据

insert into fails to insert selected data

过去几周,我一直致力于将 68GB table 分解为更规范的结构,直到今天,一切都进展顺利。

我正在尝试使用以下查询将 select 几列从大的 table 移到新的 table 中:

insert into [destination] (col1, col2, col3...)
select col1, col2, col3
From [source]
where companyID = [source].companyID

我收到消息,(60113678 行受影响),但是数据没有插入到目标中,源中的数据 table 也没有被改变,所以发生了什么受影响,为什么没有任何数据插入目标?

您似乎要执行的代码是:

update d
    set col1 = s.col1,
        col2 = s.col2,
        col3 = s.col3
    from destination d join
         sources s
         on s.companyID = s.companyId;

您编写的代码相当于:

insert into [destination] (col1, col2, col3...)
    select s.col1, s.col2, s.col3
    From [source]
    where s.companyID = s.companyID;

where等价于s.companyID is not null。因此,您已将 source 中的所有 60,113,678 行插入到 destination.

中的 new 行中

显然,故事的寓意之一是理解 insertupdate 之间的区别。更重要的是,限定 查询中的所有列名。如果您这样做了,您的查询将在 source.CompanyID = destination.CompanyId 处失败——并且您不必弄清楚如何删除 60,113,678 行新行。