0

テーブルを1行ずつ繰り返し、それらの個々の行に基づいてエントリをMSSQLの別のテーブルに挿入するにはどうすればよいですか。

4

4 に答える 4

1

行ごとに移動する必要がある場合は、カーソルを宣言して使用します。通常は良い考えではありません。なぜそうする必要があるのか​​知りたいです。質問のタグ (fetch、while) は、カーソルについて既に何らかの手がかりを持っていることを意味します。一般的な形式は次のようになります。

SET NOCOUNT ON;
DECLARE @num INT; -- other columns

-- 以下のコメントごとに、編集により LOCAL STATIC READ_ONLY FORWARD_ONLY が追加されました

DECLARE excruciatingly_slow CURSOR LOCAL STATIC READ_ONLY FORWARD_ONLY FOR 
    SELECT 1  --this is just a sample, your query (which you might want to supply) will differ
    UNION ALL 
    SELECT 2;

OPEN excruciatingly_slow;    
FETCH NEXT FROM excruciatingly_slow
    INTO @num -- other variables
    ;

WHILE @@FETCH_STATUS > -1
    BEGIN
        -- Do something here
        INSERT destination_table
            (    column_list -- other columns...
            )
        SELECT @num -- other columns
            ;

        FETCH NEXT FROM excruciatingly_slow
            INTO @num-- other variables
            ;
    END;
CLOSE excruciatingly_slow;
DEALLOCATE excruciatingly_slow;

ほとんどの場合、これは、他の回答で提案されている INSERT...SELECT... 構造を使用する方が適切です。これがコース関連の場合、宿題タグがあります。単一の挿入がカーソルによってより適切に処理されるケースを考えるのに苦労しています。

于 2012-05-02T16:57:15.463 に答える
0

このような?

INSERT INTO <table> ( <columns> )
SELECT FROM <source_table> ( <matching number columns> )
于 2012-05-02T16:38:28.343 に答える
0

あなたはこのようなことをすることができます:

insert into Table2 (columnA, ColumnB)
select ColumnA, ColumnB from Table1
where ColumnA = 'Blah'

基本的に、あるテーブルで選択を行い、それを別のテーブルに挿入します

于 2012-05-02T16:38:49.360 に答える
0

あなたはcaseそのために使うことができます:

insert into destinationTable
    select case id when 1 then ...
           end
    from sourceTable
于 2012-05-02T16:39:26.923 に答える