[英]Update SQL table from csv on multiple columns
我想要一个基本的更新过程,它更新临时表并按 PrimID 和 myDates 对其进行排序,然后更新永久表。 数据结构如下所示:
PrimID MyDates Price
1 1/1/2014 1
1 1/2/2014 2
2 1/1/2014 11
2 1/2/2014 12
3 1/1/2014 21
3 1/2/2014 22
csv 文件看起来完全一样,只是没有标题列名称。 到目前为止,这是我的代码:
CREATE Table #TempT
(
PrimID Int,
myDate Date,
myPrice Float
);
BULK
INSERT #TempT
FROM 'D:\MyWerk\SQL\TEST_dPrice_Data.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
Select * From #TempT
Order by PrimID,myDate
Drop Table #TempT
缺少的是什么,我想得到的是永久表的UPDATE
与有序的#TempT
,按PrimID
和myDates
(从最旧到最新)排序。 如果永久表中已经存在 csv 中的PrimID
& myDates
数据,我也想覆盖永久文件中的数据。 另外,除了使用 order by 之外,还有没有更好的方法可以按时间顺序获取数据?
我使用 SQL Server 2012。
非常感激。
不要尝试以某种行顺序将数据存储在 SQL 表中——这是低效的。 您可以在查询数据时进行排序。
至于插入/更新行为,SQL 合并做得很好。 批量插入后,您可以执行如下操作:
MERGE PermanentT AS [TARGET]
USING #TempT AS [SOURCE]
ON [TARGET].PrimId = [SOURCE].PrimId
AND [TARGET].MyDates = [SOURCE].MyDates
WHEN MATCHED AND [TARGET].PRICE <> [SOURCE].PRICE
THEN UPDATE SET [TARGET].PRICE = [SOURCE].PRICE
WHEN NOT MATCHED
THEN INSERT (PrimID, myDate, myPrice)
VALUES (SOURCE.PrimID, SOURCE.myDate, SOURCE.myPrice);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.