2014-04-09 47 views
0

這是我目前的表:合併2臺爲1的SQL Server

Sales Table 
OrderID Customer_ID Customer_Name 
1   12   Bob 
2   18   Ben 
3   11   Harry 

OrderID是主鍵

我有一個臨時表Temp1

Order_CreateDate Order_ReturnDate 
    20051102   20051104 
    20051103   20051108 
    20051104   20051105 

我想改變日期YYYYMMDDTemp1 table,到YYYY-MM-DD,並將其移動到表,下面的代碼不起作用,如果我直接插入到Sales Table,因爲它會顯示錯誤說:

無法將NULL值插入列「Order_ID上」,表「car_rental.dbo.DataInCentralDatabase2」;列不允許有空值。 INSERT失敗

但是,如果我通過輸出到另一個臨時表temp2進行測試,它工作。

INSERT INTO [dbo].[sales]([Order_CreateDate]) 
    SELECT 
     CONVERT(date,Order_CreateDate,111) AS Order_CreateDate 
    FROM dbo.temp1 

但是這段代碼運行兩次,temp2 table(兩個轉換列)具有以下結果:

Order_CreateDate Order_ReturnDate 
    2005-11-02   
    2005-11-03   
    2005-11-04   
    NULL    2005-11-04 
    NULL    2005-11-08 
    NULL    2005-11-05 

我知道這個問題是非常令人困惑,但最終的結果,我希望它變成這個樣子:

OrderID Customer_ID Customer_Name Order_CreateDate Order_ReturnDate 
1   12   Bob    2005-11-02    2005-11-04 
2   18   Ben    2005-11-03    2005-11-08 
3   11   Harry   2005-11-04    2005-11-05 

如何解決這個任何想法?

+2

如果您的Temp1表中沒有orderID,您如何才能瞭解哪個日期是哪個訂單? – MikkaRin

+0

您的臨時表Temp1是否也有OrderID列來映射具有相應訂單的日期? – Deepshikha

+0

我可以通過CreateDate和ReturnDate重新創建temptable1以獲得OrderID,但是如何將其插入到主銷售表中,以便它成爲最終結果? – Tuzki

回答

2

您需要TEMP1表中的另一列

OrderID Order_CreateDate Order_ReturnDate 
     1   20051102   20051104 
     2   20051103   20051108 
     3   20051104   20051105 

使用更新查詢,而不是插入查詢

UPDATE a set 
    Order_CreateDate=CONVERT(datetime,b.Order_CreateDate,111), 
    Order_ReturnDate=CONVERT(datetime,b.Order_ReturnDate,111) 
from [dbo].[sales] a join [dbo].[Temp1] b on a.OrderID = b.OrderID 
+0

虐待現在嘗試 – Tuzki

+0

真棒醬!非常感謝! – Tuzki

1

在第一個,你應該得到temp1目錄的更新版本是這樣的:

select 
     CONVERT(date,Order_CreateDate,111) as Order_CreateDate, 
     CONVERT(date,Order_ReturnDate,111) as Order_ReturnDate, 
     OrderID 
    into #temp2 
from temp1 

然後,用temp1上的連接更新您的主表,如下所示:

update s 
    s.Order_CreateDate = t.Order_CreateDate, 
    s.Order_ReturnDate = t.Order_ReturnDate 
from sales s 
     inner join #temp2 t 
      on s.OrderID = t.OrderID