将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吗?事实上,我只想约会。我现在就来试试,太棒了!非常感谢!我现在就尝尝那味道太棒了!非常感谢!