从CVS文件更新记录或删除所有表?

时间:2009-10-25 15:13:39

标签: c# sql sql-server

这是本次论坛的第一次,所以我要明确我的问题,并提前致谢

我将在C#中创建一个软件,这个应用程序需要一个CSV文件(大约73,000行)。这个文件来自另一个系统,CSV文件也可以改变,这意味着什么? CSV文件可以在一行(数据)中更改,或者可以有更多的新行或可以有更少的行,CSV每小时或半小时都会更改!!!

我将这些行从CSV文件添加到SQL中的表中,第一次很简单..我只是为CSV文件中的每一行添加ADDNEW。但是,第二次我无法删除所有表,因为这些额外的字段会从头开始再次导入它,或者在其他情况下,如果CSV中的行发生变化,我无法从表中删除所有数据。

所以我需要一个可以自动验证SQL表和CSV文件中的每条记录的方法吗?或者我需要逐个处理记录?如果我比较每一个变化,那么使用光标就可以了吗?

由于

3 个答案:

答案 0 :(得分:0)

对此没有简单的答案;这是一个过程。

首先,您使用的是哪个版本的SQL Server?如果您使用的是SQL Server 2008,则可以访问MERGE T-SQL命令,该命令可以允许您设置“upsert”命令(UPDATE或INSERT,具体取决于数据的存在)。如果您使用较旧的东西,编码会变得更复杂,但并非不可能。

其次,在加载数据时,请始终先加载到临时表中。这允许您进行基于集的比较,并根据需要“upsert”。在99.999%的情况下,您应该能够在没有光标的情况下执行此操作,并使其表现更好。

斯图

答案 1 :(得分:0)

如果您已经在使用SSIS直接加载数据并且由于某种原因不想使用临时表,并且您可以使用某种键来对行进行排序,则可以使用{{3 }}。基本上,您将“旧”表和“新”表都读入两个单独的流中,按相同的顺序对它们进行排序,并将它们传递给TableDifference。这会产生3个潜在输出 - INSERT,UPDATE和DELETE。 INSERT通常可以使用常规插入任务进行处理,但UPDATE和DELETE可以使用单独的命令调用,也可以流式传输到临时表以批量UPDATE或DELETE操作。

答案 2 :(得分:0)

现在我使用表diff ssi解决了我的问题,现在我正在使用它,感谢所有和c ya以后