来自多个列csv的动态更新表
我想要一个更新临时表的基本更新过程,并通过PrimID和myDates对其进行排序,然后更新永久表。数据结构如下所示:来自多个列csv的动态更新表
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
CSV文件将只有一个“更新”文件与新的,最新的日期的数据,但可以认为,在永久表已拍摄日期的数据。什么是缺少的,我想要的是有序的#TempT永久表的更新,按PrimID排序,然后按顺序myDates(最旧的日期到最新),但如果有csv中的myDates数据,已经在永久表中,我希望csv最新数据也覆盖永久文件中的价格数据。另外,有没有更好的方式按时间顺序获取数据,而不是使用order by?
我使用SQL Server 2012.
非常感谢。
不要试图以某种行顺序将数据存储在SQL表中 - 这是效率低下的。您可以在查询数据时进行排序。
至于插入/更新行为,SQL合并做得很好。大容量插入后,你可以执行这样的事情:
谢谢Greenspark,看起来正是我需要的。有一件事,我得到“TARGET附近的错误语法”。在你的行中,“什么时候不匹配[TARGET]”? – Allstar 2014-09-22 18:59:05
糟糕。是的,我们不需要那里的“By [TARGET]”。另外,整个合并声明需要以分号结尾。我已经做出了上述变化。 – Greenspark 2014-09-22 21:36:24
我很难理解你在做什么之后,你想根据'primid更新'mydate'和'myprice'值',但只有价格,如果'primid'和'mydate'在两个表中? – 2014-09-18 19:18:34
更新查询中很少需要order by子句。根据你试图达到的目标,sql max()函数可能是合适的。 – 2014-09-18 19:37:07