ВЫБЕРИТЕ ТАБЛИЦУ ПОВТОРНОЙ ТАБЛИЦЫ MSSQL - PullRequest
0 голосов
/ 30 мая 2018

Прежде всего, я люблю переполнение стека, вы все очень полезны ..

У меня есть ситуация, у меня есть таблица с такими данными;

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

Теперь я мог бы пойти и поставить цикл while 3 раза и сделать, однако этот скрипт выборадолжно повторяться 400 000 раз, поэтому использование insert-> select-> insert-> select и т. д. вызовет значительную перегрузку.Я хочу сделать что-то вроде этого:

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

Я не знаю, возможно ли это вообще, однако другой метод использует COMMIT, но я не знаю, как это эффективно использовать.

1 Ответ

0 голосов
/ 30 мая 2018

Вы пытались использовать 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
...