0

您如何逐行遍历表,并将基于这些单独行的条目插入 MSSQL 中的另一个表中?

4

4 回答 4

1

如果您必须逐行进行,您将声明并使用游标。这通常不是一个好主意,我很好奇你为什么需要这样做。您问题上的标签(获取,而)暗示您已经对游标有所了解。一般形式如下所示:

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 回答