这是我目前的表格:
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
我想将YYYYMMDD
中的日期Temp1 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
关于如何解决这个问题的任何想法?
答案 0 :(得分: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
答案 1 :(得分: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上的join更新主表,如下所示:
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