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 строки и т. Д., Пока таблица не заполнится.
Затем вы вставляете путем перекрестного соединения этой таблицы с таблицей, содержащей даты, и вставляете (дата начала + интервалы (дни)), где дата начала + интервал <= дата окончания.