-5

我想将几百行插入到另一个表中指向 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 行 ',' 附近的语法不正确。

4

2 回答 2

13

您当前的语法问题是@count = @count + 1;which need to be 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在上面添加一个子句。

于 2012-08-28T16:25:49.917 回答
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

您不必逐行进行。

于 2012-08-28T16:55:56.817 回答