#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