Есть необходимость вставить рандомные даты по заданному количеству

Есть таблица(RandomDate) с одним полем(Date), в которую с помощью процедуры генерируется случайная дата в заданному диапазоне. В процедуре на вход 3 параметра. Хочется добавить еще один, который вставит несколько строк, согласно заданному параметру. Спасибо

CREATE OR ALTER PROC ADD_ROWS

-- @addrows 
@Date DATE
,@EndDate DATE
,@DayBetween int

AS 

SET NOCOUNT ON  

SET @DayBetween = (1 + (DATEDIFF(DAY, @Date, @EndDate)))
SET @Date = DATEADD(DAY, RAND(CHECKSUM(NEWID())) * @DayBetween , @Date )
INSERT INTO RandomDate(Date) 
    VALUES (@Date)

SELECT SCOPE_IDENTITY()

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Andrei Khotko

Используйте цикл WHILE. Также, нет смысла передавать в хранимую процедуру параметр @DayBetween - вы его все равно вычисляете в хранимой процедуре. Я его убрал. Вот итоговый код:

CREATE OR ALTER PROC ADD_ROWS
 @Date DATE
,@EndDate DATE
,@N INT = 1

AS 

BEGIN

  SET NOCOUNT ON

  DECLARE @i INT = 0;
  DECLARE @DayBetween INT;
  SET @DayBetween = (1 + (DATEDIFF(DAY, @Date, @EndDate)))

  WHILE @i < @N
  BEGIN

    SET @Date = DATEADD(DAY, RAND(CHECKSUM(NEWID())) * @DayBetween , @Date )
    INSERT INTO RandomDate(Date) 
        VALUES (@Date)
    SET @i = @i + 1;

  END

  SELECT SCOPE_IDENTITY()

END;
→ Ссылка