将2个表合并到1个SQL Server中

将2个表合并到1个SQL Server中,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,这是我当前的表格: Sales Table OrderID Customer_ID Customer_Name 1 12 Bob 2 18 Ben 3 11 Harry OrderID是主键 我有一个临时表Temp1: Order_CreateDate Order_ReturnDate 20051102 20051104 200

这是我当前的表格:

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
我想将
Temp1表中的日期
yyyyymmdd
更改为
YYYY-MM-DD
,并将其移动到表中,如果我直接插入
销售表中,下面的代码将不起作用,因为它显示错误提示:

无法将值NULL插入表“car_rental.dbo.DataInCentralDatabase2”的“Order_ID”列中;列不允许空值。插入失败

但是,如果我通过输出到另一个临时表
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
 select 
      CONVERT(date,Order_CreateDate,111) as Order_CreateDate,
      CONVERT(date,Order_ReturnDate,111) as Order_ReturnDate,
      OrderID 
   into #temp2
 from 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 

关于如何解决这个问题,您有什么想法吗?

您需要在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  

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  

首先,您应该得到一个更新的temp1版本,如下所示:

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
 select 
      CONVERT(date,Order_CreateDate,111) as Order_CreateDate,
      CONVERT(date,Order_ReturnDate,111) as Order_ReturnDate,
      OrderID 
   into #temp2
 from 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 
然后,在temp1上使用join更新主表,如下所示:

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
 select 
      CONVERT(date,Order_CreateDate,111) as Order_CreateDate,
      CONVERT(date,Order_ReturnDate,111) as Order_ReturnDate,
      OrderID 
   into #temp2
 from 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 

首先,您应该得到一个更新的temp1版本,如下所示:

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
 select 
      CONVERT(date,Order_CreateDate,111) as Order_CreateDate,
      CONVERT(date,Order_ReturnDate,111) as Order_ReturnDate,
      OrderID 
   into #temp2
 from 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 
然后,在temp1上使用join更新主表,如下所示:

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
 select 
      CONVERT(date,Order_CreateDate,111) as Order_CreateDate,
      CONVERT(date,Order_ReturnDate,111) as Order_ReturnDate,
      OrderID 
   into #temp2
 from 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 

如果Temp1表中没有orderID,如何理解哪个日期是哪个订单的日期?Temp1表中是否也有orderID列来映射相应订单的日期?我可以重新创建Entertable1,使其具有orderID以及CreateDate和ReturnDate,但是,如何将其插入主销售表中,使其成为发布的最终结果?如果“日期”列实际上是
DateTime
,则插入时不需要convert语句。“DateTime”接受20051104吗?事实上,我只想要日期如果您的Temp1表中没有orderID,您如何理解哪个日期是哪个订单的日期?您的Temp1表是否也有orderID列以将日期映射到相应的订单?我可以重新创建Entertable1,使其具有orderID以及CreateDate和ReturnDate,但是,如何将其插入主销售表中,使其成为发布的最终结果?如果“日期”列实际上是
DateTime
,则插入时不需要convert语句。“DateTime”接受20051104吗?事实上,我只想约会。我现在就来试试,太棒了!非常感谢!我现在就尝尝那味道太棒了!非常感谢!