代码之家  ›  专栏  ›  技术社区  ›  Kiel

选择表重复表循环MSSQL

  •  3
  • Kiel  · 技术社区  · 6 年前

    首先我爱堆积如山,你们都是那么的乐于助人…

    我有一个情况,我有一个这样的数据表;

    1 - Apple
    2 - Bananna
    3 - Pear
    4 - Orange
    5 - Plum
    

    我可以做这样的事;

    DECLARE @C INT = 0
    WHILE (@C < 3) 
        BEGIN
            INSERT INTO tbl1 (ID,Name)
            SELECT * FROM tbl2 -- THIS WILL CONTAIN 5 Rows
            SET @C+=1
        END
    

    所以最终会是这样;

    1 - Apple
    2 - Bananna
    3 - Pear
    4 - Orange
    5 - Plum
    1 - Apple
    2 - Bananna
    3 - Pear
    4 - Orange
    5 - Plum
    1 - Apple
    2 - Bananna
    3 - Pear
    4 - Orange
    5 - Plum
    

    现在,我可以继续循环3次并完成,但是这个select脚本要重复400000次,因此使用insert->select->insert->select等会导致大量过载。我想做的是这样的事情;

    INSERT INTO tbl1
    SELECT 
       ID,
       Name,
       @C = COUNT(ID) 
    FROM tbl2 
    WHERE @C < 3
    

    我不知道这是否可能,但是另一种方法是使用commit,但是我不知道如何有效地使用它。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Mazhar    6 年前

    你试过用 GO 执行 INSERT 批处理语句

    IF OBJECT_ID(N'dbo.T1', N'U') IS NULL
    CREATE TABLE dbo.T1
        ([Id] int, [name] varchar(7)) ;
    
    IF OBJECT_ID(N'dbo.T2', N'U') IS NULL
    CREATE TABLE dbo.T2
        ([Id] int, [name] varchar(7)) ;
    
    INSERT INTO T1
        ([Id], [Name])
    VALUES
        (1, 'Apple'),
        (2, 'Bananna'),
        (3, 'Pear'),
        (4, 'Orange'),
        (5, 'Plum')
    ;
    
    INSERT INTO dbo.T2
    (Id,[name])
    SELECT T.Id
            ,T.[name] 
    FROM dbo.T1 T 
    GO 100
    
    DROP TABLE dbo.T1
    DROP TABLE dbo.T2