使用while循环在表中插入多个记录

时间:2012-08-28 16:17:11

标签: sql sql-server tsql

我想在表中插入几百行,指向其他表中的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

但这似乎不起作用!任何人都可以帮忙...我想要做的就是插入记录数=主表中存在的记录数。

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

我要么接近计数

的sytax不正确

Msg 102,Level 15,State 1,Line 17 ','。

附近的语法不正确

2 个答案:

答案 0 :(得分:13)

您当前的语法问题是@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子句。

答案 1 :(得分:7)

关于消息102,级别15,状态1,行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

您不必逐行。