2016-04-21 155 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值並導出日期範圍。這個實現將類似於爆炸。