SELECT TABLE REPEAT TABLE LOOP MSSQL

时间:2018-05-30 07:43:18

标签: sql-server select while-loop insert

首先我很喜欢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次循环并完成,但是这个选择的脚本要重复400,000次,所以使用insert-&gt; select-&gt; insert-&gt; select等会导致大量过载。我想做的是这样的事情;

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

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

1 个答案:

答案 0 :(得分: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