使用while循环在表中插入多条记录[关闭]

Posted

技术标签:

【中文标题】使用while循环在表中插入多条记录[关闭]【英文标题】:Inserting a multiple records in a table with while loop [closed] 【发布时间】:2012-08-28 16:17:10 【问题描述】:

我想将几百行插入一个指向另一个表中的 pk 的表中。我一直在尝试使用 while 循环在表中插入多条记录。我实际上是在设置我的测试数据。

这就是我正在做的:

declare @count int;
set @count = 4018;

while @count <= 5040 
begin
    INSERT INTO [MY_TABLE]
               ([pk_from_other_table]
               ,[..]
               ,[...]
               ,[..]
               ,[..]
               ,[...]
               ,[...]
               ,[..])
        select
               (pk_from_other_table,
               ,[..]
               ,[...]
               ,[..]
               ,[..]
               ,[...]
               ,[...]
               ,[..])
    @count = @count + 1;
end

但这似乎不起作用!谁能帮忙...我要做的就是插入记录数=主表中存在的记录数。

?关于如何实现这一目标的任何想法?

我在 count 附近得到不正确的语法

消息 102,级别 15,状态 1,第 17 行 ',' 附近的语法不正确。

【问题讨论】:

请更新您的问题,我们看不到您的尝试。 现在添加......添加了一些不正确的东西..更正它 错误信息是什么? 您遗漏了很多内容,包括MY_TABLE 的架构。是否有错误消息,例如表示您无法为标识列指定值? Line 17 是否意味着您发布的删节代码? 【参考方案1】:

您当前的语法问题是 @count = @count + 1; 必须是 set @count = @count + 1

但是……

不需要循环。你可以直接做一个大的插入,比如:

insert into your_table (fk_col, other_col1, other_col2)
select pk_col, 'something', 'something else' 
from your_other_table

如果需要,可以在上面添加where子句。

【讨论】:

是的,但我想循环浏览..这些记录很多 您在基于集合的环境中工作——尽可能避免循环。 @user1630846 - 几百行,到目前为止,记录并不多。 @user1630846 循环很慢,在使用关系数据库时应尽可能避免。 @user1630846 见:RBAR【参考方案2】:

关于Msg 102, Level 15, State 1, Line 17 ',' 附近的语法错误。

您在第二个选择列表中有双逗号:

select
(pk_from_other_table,
,[..]

删除一个。

关于插入: 如果您想将源表中的所有记录多次插入到目标表中,您可以循环执行:

declare @count int;
set @count = 4018;

while @count <= 5040 
begin
    INSERT INTO DestinationTableName
               (DestinationTableColumn1Name
               ,DestinationTableColumn2Name --ect
        )
        select
               SourceTableColumn1Name
               ,SourceTableColumn2Name --ect
               from SourceTableName
    set @count = @count + 1;
end

但是当你想从源表中插入多行到目标时,where 就足够了:

INSERT INTO DestinationTableName
            (DestinationTableColumn1Name
            ,DestinationTableColumn2Name --ect
            )
            select
            SourceTableColumn1Name
           ,SourceTableColumn2Name --ect
            from SourceTableName
            where SourceTablePK between 4018 and 5040 --LowerBound and UpperBound
            --or SourceTablePK in (1, 2, 3) etc

您不必逐行进行。

【讨论】:

以上是关于使用while循环在表中插入多条记录[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如果它已经在表中,如何不在sqlite中记录[关闭]

MySQL---循环结构演练

Python & Bigquery:使用 for 循环在表中逐行查询和插入数据

无法使用oracle中的游标在表中插入记录

如果存在则插入仅在表中有记录时才有效

如果已存在则更新行,否则使用 mysql 在表中插入新记录