使用循环将数据从一个表插入到另一个表

Posted

技术标签:

【中文标题】使用循环将数据从一个表插入到另一个表【英文标题】:Inserting data from one table to another using a loop 【发布时间】:2018-10-15 09:40:00 【问题描述】:

我正在尝试将数据从一个表插入到另一个表(从表 [PPRS] 到表 [Verify]),其中 PPRS 中的标题与表 [Master] 中的标题相同。有人建议我使用循环插入数据而不是硬编码,但是我对如何去做感到困惑。

到目前为止,这是我的代码:

声明@counter int 声明@total int 设置@counter = 0 从 PPRS 中选择 @total = Count(*)

而@counter

end 

没有插入数据(0 行受影响)

我尝试插入的示例数据:

17286 01/03/2018 MP - 青年环境服务 (12/15) 15/10/2018

【问题讨论】:

循环的意义何在? 一些示例数据将有助于向我们解释您的问题。 “我想使用循环” 为什么?对于可以使用数据集方法实现的某些事情(例如),循环通常是最糟糕的选项。 至于你的错误原因,我怀疑你的表Verify 有不止一列。不过,我不明白为什么这是一个循环,因为它只会运行相同的语句 10 次;其中后面的语句不太可能做任何事情,因为相关行将在第一次迭代中插入。 我希望能够将 PPRS 中 [PPR_Caption] 列中的数据插入到表验证中,而不必手动插入,因为记录可能很多 【参考方案1】:

我建议这与您想要做的事情一致:

INSERT INTO [Verify] (some_col)   -- you never told us the name of this column
SELECT TOP 10 [PPR_Caption]
FROM PPRS
WHERE [PPR_Caption] IN (SELECT [Caption] FROM MasterRecords)
ORDER BY some_column;

也就是说,您要在Verify 表中插入十条记录,由源PPRS 表中的某个顺序确定。

【讨论】:

这可能是实现 OP 想要的更好的方法,但我很确定这仍然会返回错误 Column name or number of supplied values does not match table definition.【参考方案2】:

尝试声明要插入的特定列。请提供表 PPRS 和验证的定义以获得社区的更精确帮助。 无论如何,请在下面找到:

Declare @counter int 
set @counter = 0

while @counter <= 10
    begin 
        set @counter += 1
        insert into [Verify] (NameofColumn1_Table_Verify, NameofColumn2_Table_Verify,...)
        select  PPRS.NameofColumn1_Table_PPRS,
                PPRS.NameofColumn2_Table_PPRS,
                ...

        FROM PPRS
        where PPRS.[PPR_Caption] in (SELECT DISTINCT [Caption] from MasterRecords)

    end 

无论如何,我认为循环是不必要的。一批应该可以。请在最后写下你想要达到的目标。

【讨论】:

以上是关于使用循环将数据从一个表插入到另一个表的主要内容,如果未能解决你的问题,请参考以下文章

SQL 将某些数据从一个表插入到另一个表

MYSQL将数据从一个表插入到另一个表中

DAO 函数将数据从一个表插入到另一个表

如何在展平嵌套字段后将数据​​从一个 bigquery 表流式插入到另一个表?

如何使用 for 循环选择字段值并将它们插入到另一个表中

从一个数据库表插入到另一个