繁体   English   中英

在多列上从 csv 更新 SQL 表

[英]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 ,按PrimIDmyDates (从最旧到最新)排序。 如果永久表中已经存在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM