SQL для вставки нескольких строк

Привет у меня есть таблица, как показано ниже,

Id      StartDt          EndDt       
-----   --------         -------
123     01-Apr-2016      15-Apr-2016
456      02-Apr-2016     03-Apr-2016

Я хочу написать общий SQL-оператор вставки, который будет работать на всех платформах БД.

Так что я вставлю данные, аналогичные приведенным ниже, в новую таблицу из приведенной выше.

Новое значение таблицы после вставки:

Id       Date           SeqNo
123      01-Apr-2016       1
123      02-Apr-2016       2
123      03-Apr-2016       3
123      04-Apr-2016       4
123      05-Apr-2016       5
123      06-Apr-2016       6
123      07-Apr-2016       7
123      08-Apr-2016       8
..
..
..
..
123      15-Apr-2016       15,


AssignmentID    Date    SeqNo
123 1-Apr   1
123 2-Apr   2
123 3-Apr   3
123 4-Apr   4
123 5-Apr   5
.       
.       
.       
.       
.       
123 15-Apr  15

Таким образом, пятнадцать строк для первой строки, т.е. (Дата окончания - Дата начала) и аналогично две строки для второй строки из основной таблицы (Дата окончания - Дата начала).

2 ответа

Это будет лучше всего сделано в UDTF. UDTF будет иметь значения ввода 2 и экспортировать диапазон дат. Эта реализация будет похожа на Explode.

Вы бы создали таблицу интервалов, содержащую все целые числа от 0 до 9999. Вы можете сделать это программно:

CREATE TABLE intervals (period int);
INSERT INTO intervals (period) VALUES (0),(1);
DECLARE @rowCnt int;
SELECT @rowCnt = 2;
WHILE (SELECT Count(*) FROM intervals) < 10000 BEGIN
    INSERT INTO intervals (period) SELECT period + @rowCnt FROM intervals WHERE period + @rowCnt < 10000;
    SELECT @rowCnt = @rowCnt * 2
END;

При первом запуске цикла он вставляет 2 строки со значениями 2 и 3, затем 4 строки и т. Д., Пока таблица не заполнится.

Затем вы вставляете путем перекрестного соединения этой таблицы с таблицей, содержащей даты, и вставляете (дата начала + интервалы (дни)), где дата начала + интервал <= дата окончания.

Другие вопросы по тегам