Есть необходимость вставить рандомные даты по заданному количеству
Есть таблица(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;