问题:我尝试将带有数千/数百万行的.csv
文件插入到带有bulk insert
查询的SQL Server表中。现在我想更新具有批量更新的表格,其中特定列会发生变化,例如价格发生变化。我怎样才能做到这一点?而且:我想在插入表格时忽略约束
BULK INSERT Table
FROM 'D:\test.csv'
WITH
(FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n')
GO
现在例如表格包含价格列,当我第二次更新文件时,只有那行价格不同的行更新
答案 0 :(得分:3)
在两个(或更多)步骤中执行此操作。
插入原始数据(缺陷和所有),然后运行单独的更新语句,使其看起来如您所愿。
对于大型或繁忙的桌子,或者为了使新数据保持分离直到准备就绪,您可能还需要首先批量插入到单独的保持表中,按摩并清理那里的数据,然后从保持中迁移表到决赛桌。
或者,您可以编写客户端程序以在批量插入之前预清理数据,或者您可以使用Sql Server Integration Services(SSIS)之类的工具来处理导入。 SSIS有很多很好的功能来处理这类事情。
您无法做的是对批量插入代码进行简单或快速的调整。它完成它的功能,仅此而已。
答案 1 :(得分:1)
您不能只是在上一次上传之前批量上传一个文件,而只记录差异。您要么完全刷新数据(即:覆盖的完整加载),将完整的CSV上传到临时表并使用SQL代码比较这两个表,或者您可以使用SSIS等工具连接到CSV文件,检查它针对表中的vales并从那里触发更新。