早上好;目前,我整周每天都收到公司的时间日志。例如,现在是星期四,因此我将看到星期一(7/30),星期二(7/31)等的条目。我想将其批量加载到SQL中,但似乎无法弄清楚该如何做。如果我使用flatfile导入,它会很快加载,没有问题,但是只能在导入时创建一个新表。我希望仅通过一个临时表更新所有新值,并且仅将前一天的新值加载到我的表“ Timelog”中。这是平面文件导入:
除了两件事之外,我到底想要什么。我知道,即使我可以将它追加到现有表中,它也会再次重新导入所有数据,这是不可行的,因为我将有重复的值。
这是CSV文件
所以我试图写一个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
)
这失败了,因为它说它找不到我必须在路径上工作的文件,但是我也知道这将不起作用,因为它没有删除重复的值。有人可以帮忙吗?
答案 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文件