从仅通过电子邮件发送的更新值将每日CSV文件导入SQL Server

时间:2018-08-02 12:29:31

标签: sql sql-server csv import

早上好;目前,我整周每天都收到公司的时间日志。例如,现在是星期四,因此我将看到星期一(7/30),星期二(7/31)等的条目。我想将其批量加载到SQL中,但似乎无法弄清楚该如何做。如果我使用flatfile导入,它会很快加载,没有问题,但是只能在导入时创建一个新表。我希望仅通过一个临时表更新所有新值,并且仅将前一天的新值加载到我的表“ Timelog”中。这是平面文件导入:

Flat File

除了两件事之外,我到底想要什么。我知道,即使我可以将它追加到现有表中,它也会再次重新导入所有数据,这是不可行的,因为我将有重复的值。

这是CSV文件

CSV File

所以我试图写一个bulkinsert语句:

BULK INSERT Timelog
FROM '‪C:\Intel\555.csv'
WITH
(
FIRSTROW = 8,
FIELDTERMINATOR = ',',  --CSV field delimiter
ROWTERMINATOR = '\n',   --Use to shift the control to next row
ERRORFILE = 'C:\CSVDATA\derrors.csv',
TABLOCK
)

这失败了,因为它说它找不到我必须在路径上工作的文件,但是我也知道这将不起作用,因为它没有删除重复的值。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

您遇到访问问题。如果您在SERVER上并想转到本地PC上的直接路径,那么显然您不能这样做。您的文件必须与SQL Server位于同一服务器上。除非您指定其他任何内容。

此示例对我有用:

declare @sql varchar(max)

select @sql = 'BULK INSERT dbo.Timelog FROM ';
select @sql = @sql +'''D:\Test\555csb.csv''';
select @sql = @sql + ' WITH
(

FIRSTROW = 2,
FIELDTERMINATOR = '';'',  --CSV field delimiter
ROWTERMINATOR = ''\n'',   --Use to shift the control to next row
ERRORFILE = ''D:\Test\derrors.csv'',TABLOCK)';
print @sql
exec(@sql)

CSV文件

enter image description here

结果 enter image description here