我将CSV文件导入SQL服务器。问题是我需要更新是否找到了行,但我还没有找到INSERT UPDATE等效或类似的东西。
这是我目前的代码:
BULK INSERT Actuals_Financials_Temp FROM '\\STRMV3302\Temp\Actuals_Financials_Temp.csv'
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', FIRSTROW = 2)
有没有办法更新匹配键的行?或者至少忽略它们,以便上传其余内容,然后执行类似BULK UPDATE的操作?
答案 0 :(得分:3)
不直接,不。您需要BULK INSERT
进入临时表,然后更新现有记录并插入丢失的记录。我会首先尝试使用本地临时表(即#TableName
)。
从技术上讲,您可以执行以下任一操作(两者都使用OPENROWSET):
OPENROWSET(BULK...)
进行UPDATE,然后使用INSERT查询。但是,必须对此进行测试,以确定两次读取文件的成本是否值得省去不必将其读入临时表(只是将其写回磁盘)。使用登台表可能仍然会更好,因为第一个查询UPDATE可能会自动创建一些有益于第二个查询INSERT的统计信息,因为该查询需要LEFT JOIN
或者WHERE NOT EXISTS
。MERGE
以及OPENROWSET(BULK...)
,但MERGE
有一些"问题"所以我不会尝试这个。