Как дублировать все записи в таблице SQL Server n раз?

#sql #sql-server #tsql

Вопрос:

Существует ли какой-либо SQL-запрос для дублирования всех записей в таблице в течение n раз? Итак, допустим, у меня есть 1000 записей в таблице 1, есть ли какой-либо SQL-запрос для дублирования этих 1000 записей в n раз? Вместо того, чтобы копировать и вставлять данные с самого начала?

Комментарии:

1. insert into t select * from t удвоит ряды. Еще один раз, и у вас будет в 4 раза больше исходного числа строк.

2. CROSS JOIN к строкам (встроенной) таблицы подсчета TOP (@N) ?

3. @jarlh Я благодарю вас, но это приводит меня к ошибке «Явное значение столбца идентификатора в таблице может быть указано только в том случае, если используется список столбцов и включена функция IDENTITY_INSERT.

4. @Larnu извините, я не понял вашу точку зрения

5. В какой части, @Hassan ? CROSS JOIN или Тэлли?

Ответ №1:

ярлх и Ларну дали решение в комментариях к запросу, но у вас возникли трудности с пониманием концепции.

Очевидно, что дубликаты, о которых вы говорите, не являются реальными дубликатами. Они различаются по своим идентификаторам. Это означает, что вы должны перечислить столбцы и опустить идентификатор: insert into t (col1, col2) select col1, col2 from t .

С помощью специальной таблицы подсчета:

 insert into t (col1, col2)  select col1, col2  from t  cross join (values (1),(2),(3),(4),(5)) tally(i);  

Комментарии:

1. Правильно, оба ответа верны и отлично сработали, спасибо

2. Хотя, по правде говоря, я бы не рекомендовал WHILE , @Hassan ; это будет значительно медленнее.

3. @Ларну да ларну, большое тебе спасибо

Ответ №2:

 DECLARE @Counter INT  SET @Counter=1 WHILE ( @Counter lt;= 10) BEGIN  --Do insert here  SET @Counter = @Counter   1 END