2016-04-21 85 views
0

您好我有一个表,如下,SQL插入多行

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

我想编写一个通用的SQL INSERT语句将在所有的数据库平台上工作。

所以,我会插入后插入类似以下数据到新表从上面的一个

新表值:

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 

所以15行的第一行即(终止日期 - 开始日期)和主表中第二行的类似两行(结束日期 - 开始日期)。

+0

您必须为此编写一个过程,根据您使用的SQL类型的不同,该过程会稍微有所不同。你有一个特定类型的SQL,你想这样做? –

+0

为什么所有这些dbms产品?你真的在这里使用所有的MySQL,Oracle和Sybase? – jarlh

回答

0

你会创建一个间隔表,包含所有整数从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行等,直到桌子满了。

然后,通过将此表与包含日期的表交叉连接并插入(开始日期+间隔(天)),其中开始日期+间隔< =完成日期。

+0

嗨约翰,开始日期和结束日期的差异可以达到2000年,即开始日期可以是01Apr2016,结束日期是01Apr2021。所以你认为可以创建一个间隔表格,并且间隔表格可以预设为固定的行数。这可以从几百到2000甚至3000不等。也可以让我知道如何使用SQL创建间隔表。 –

+0

@SaeemAhamed - 根据请求的信息更新答案 –

0

这将最好在UDTF中完成。 UDTF将具有输入2值并导出日期范围。这个实现将类似于爆炸。