-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

しかし、これはうまくいかないようです!誰か助けてくれませんか...私がやりたいのは、レコード数=プライマリテーブルに存在するレコード数を挿入することだけです。

?どうすればこれを達成できるかについてのアイデアはありますか?

私はカウントの近くで間違ったsytaxを取得します

また

メッセージ102、レベル15、状態1、行17'、'の近くの構文が正しくありません。

4

2 に答える 2

13

現在の構文の問題は、で@count = @count + 1;ある必要があるものにありますset @count = @count + 1

だが...

ループは必要ありません。次のように、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について'、'の近くの構文が正しくありません。

2番目の選択リストに2つのコンマがあります。

select
(pk_from_other_table,
,[..]

1つ削除します。

挿入について:ソーステーブルから宛先にすべてのレコードを何度も挿入する場合は、ループで行うことができます。

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 に答える