Вот подход для SQL Server: Пример Fiddle
declare @rowToBeCopiedId bigint = 1
, @count int = 10
; with noRowsToInsertCte
(
select 1 x
where @count > 0
union all
select x + 1
from noRowsToInsertCte
where @count > x
)
insert MyTable (col1, col2)
select col1, col2
from MyTable
cross join noRowsToInsertCte
where id = @rowToBeCopiedId
Если вместо дублирования записей в базе данных вы просто хотите продублировать запись в наборе результатов, вы можете сделатьэто как ниже.В этом примере используется столбец в данных, чтобы указать, сколько раз должна быть повторена связанная запись, и используется представление, позволяющее легко повторно использовать эту логику:
create view vMyTableWithCount as
with innerCte as
(
select id
, col1
, col2
, cnt
, 1 i
from MyTable
where cnt > 0
union all
select id
, col1
, col2
, cnt
, i + 1
from innerCte
where i < cnt
)
select *
from innerCte
Для получения дополнительной информации см. пример скрипки .