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

将每日CSV文件从仅电子邮件更新的值导入SQL Server,sql,sql-server,csv,import,Sql,Sql Server,Csv,Import,早上好,;我目前每天都会收到公司的时间日志,整个星期都是如此。例如,现在是星期四,我将看到星期一7/30星期二7/31等的条目。我只想将其批量加载到SQL中,但似乎不知道如何。如果我使用平面文件导入,它会在快照中加载,没有问题,但只能在导入时创建一个新表。我更愿意让它只更新任何新值,可能是通过一个诱人的方法,并且只将前一天的新值加载到我的Timelog表中。这是平面文件导入: 这正是我想要的,除了两件事。我知道,即使我可以让它附加到现有的表中,它也会再次重新导入所有数据,这是不可能的,而且我会有

早上好,;我目前每天都会收到公司的时间日志,整个星期都是如此。例如,现在是星期四,我将看到星期一7/30星期二7/31等的条目。我只想将其批量加载到SQL中,但似乎不知道如何。如果我使用平面文件导入,它会在快照中加载,没有问题,但只能在导入时创建一个新表。我更愿意让它只更新任何新值,可能是通过一个诱人的方法,并且只将前一天的新值加载到我的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
)

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

或者您有访问问题。如果你在一台服务器上,想在你的本地电脑上找到一个直接路径,很明显你不能这样做。您的文件必须与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文件

结果

您得到了哪种错误代码?它找不到CSV文件-我在网络上,SQL server在单独的服务器上,因此在某个时候,我会让文件开始保存在它的直接C驱动器上,以避免在查询按我希望的方式工作时出现路径问题。但是,如果我进行平面文件导入,它会在快照中找到它,删除前7行和所有内容,但我无法/不知道如何访问它后面的基本sql语句。当您尝试执行AKS以回答我的朋友的快速问题时,我必须写一个错误代码。我从我们的工资第三方公司收到CSV。他们为我们处理所有这些,并且只能以逗号分隔接收,如果我明天运行同一个报告,您发布的不是重复的值吗?是的,当然会。它总是将整个文件插入timelog。将数据插入TimeLogTemp,每次截断该TimeLogTemp。并合并只接受最新记录的SQL。你不能在不太复杂的情况下递增加载你的csv文件。或者你可以在插入记录之前截断你的表…不管怎样,这一切都需要完成-除非你在不同的文件中获取数据。听起来不错,谢谢你,伙计!让我摆弄一会儿。我非常感谢你的帮助!Msg 4832,级别16,状态1,第1行批量加载:数据文件中遇到意外的文件结尾。Msg 7301,级别16,状态2,第1行无法从OLE DB提供程序批量获取链接服务器null所需的接口IID_IColumnsInfo。这是我在运行它时遇到的错误