【问题标题】:SELECT TABLE REPEAT TABLE LOOP MSSQL选择表重复表循环 MSSQL
【发布时间】:2018-11-08 23:23:55
【问题描述】:

首先我很喜欢 Stack Overflow,你们都很乐于助人..

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

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 次 while 循环并完成,但是这个选择脚本要重复 400,000 次,因此使用 insert->select->insert->select 等会导致大量过载。我想做的是这样的;

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

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

【问题讨论】:

    标签: sql-server select while-loop insert


    【解决方案1】:

    您是否尝试过使用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
    

    【讨论】:

    • 这对我有用,请参阅完整示例解决方案的更新答案
    猜你喜欢
    • 2018-11-11
    • 1970-01-01
    • 2014-11-09
    • 2017-11-20
    • 2023-01-07
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    相关资源
    最近更新 更多