2009-07-14 66 views
5

我在sql server 2005中有一个产品表,需要通过csv文件中的某些字段进行更新。这两个文件都有一个供应商部件号,可以链接到我可以在csv文件中更新products.discontined字段与另一个字段的位置。tsql:用csv文件更新数据库表的最好方法

我的问题是什么是最好的方法来解决这个问题?

我曾考虑创建一个到excel文件的odbc连接,并找出如何合并更新2列。将整个csv文件(〜60 MB)导入到sql server中的临时表中,然后编写一个tsql过程来搜索,比较和更新?也做的和从查询分析器开源命令和编写过程中的CSV文件的读取和更新表的方式..提前

感谢

+1

这是一个不断更新,还是一次性操作?这将有助于确定最佳路径。 – 2009-07-14 16:15:43

+1

也是CSV清洁? IE引号逃脱了之类的? – 2009-07-14 16:16:40

回答

3

如果它提供给你,与SQL Server 2005中你最好的选择是SQL Server集成服务(以前称为数据转换服务或DTS)。这可以让你创建一个可以驻留在任何地方,并按计划运行或在你决定时调用的软件包。它可以异步运行到调用它的应用程序。

更新:
此外,您可以在决定发布它之前运行和调试软件包以使其完美。这将允许你考虑的事情,如畸形文件等

如果你没有SSIS提供给你,那么你可以做批量插入(参考:http://blog.sqlauthority.com/2008/02/06/sql-server-import-csv-file-into-sql-server-using-bulk-insert-load-comma-delimited-file-into-sql-server/

创建轮廓相匹配的表您的CSV导入,然后用下面的:

BULK 
INSERT MyTable 
FROM ‘c:\mycsv.csv’ 
WITH 
(
    FIELDTERMINATOR = ‘,’, 
    ROWTERMINATOR = ‘\n’ 
) 

从那里你可以使用T-SQL改造它,因为它是在你的数据库的表。

如果它是一个不断更新,您可以创建临时表来完成您的工作并将存储过程作为一项工作来运行。