使用循环将数据从一个表插入到另一个表
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
无论如何,我认为循环是不必要的。一批应该可以。请在最后写下你想要达到的目标。
【讨论】:
以上是关于使用循环将数据从一个表插入到另一个表的主要内容,如果未能解决你的问题,请参考以下文章