我将获得28个固定宽度文件并将其合并到一个表中。在过去,这是通过FoxPro完成的。正如我今天所了解的那样,FoxPro没有拒绝或有任何问题的重复。我发现当我尝试使用导入向导单独导入每个错误时,我需要编写一个合并语句来导入28并且不会被重复的主键错误绊倒。
我将Management Studio与SQL Server Express前端一起使用,因此无法创建SSIS包。
我打算将其分解为两个问题,以免使其过于复杂。首先,我已经使用Excel将固定宽度文件转换为制表符分隔的文本文件。
第一个问题:可以构建一个合并语句,将文件(制表符分隔)从C驱动器带入SQL Server吗?我可以使用导入向导导入每个,但这很麻烦。我知道如何编写合并语句,但它要求SQL Server中已存在数据。以下是一个例子。问题是我如何从外面带来它。
Merge Industry as TARGET
Using Table1 as SOURCE
On (TARGET.Primary keys 1-9 = SOURCE.Primary keys 1-9)
答案 0 :(得分:2)
不,您无法在MERGE
语句期间或作为MERGE
语句的一部分导入数据。 BULK INSERT
操作仅限于“{1}}操作”。情况;构建逻辑,将两个结果集与匹配和不匹配的标准相结合。
要将数据导入SQL Server,您可以通过UI工作(当您有28个文件时,这非常无聊并且容易出错),或者您可以使用某些内置命令,例如BULK INSERT
。< / p>
也许您可以逐个setState
文件,并在每次导入后合并。
答案 1 :(得分:1)
如果您想继续使用Foxpro但删除重复记录,则第一条建议是使用导入向导退出。
奇才可能很方便使用,但它们带有自己的“行李”套装,这可能会有问题。
除了说它们是固定字段长度格式之外,您没有指明28个导入文件所在的格式(CSV,SDF,TXT等)。无论您是否可以轻松编写Foxpro代码来处理所有导入而无需使用“向导”。
然后,一旦导入了所有记录,您就可以轻松地删除重复项,如下所示:
SELECT ImportDBF && Assuming it is used EXCLUSIVELY
DELETE ALL
INDEX ON <primary key> UNIQUE TAG Uniq && Create an Index on only UNIQUE instances of your Primary key field
RECALL ALL && Recall only those UNIQUE records
DELETE TAG Uniq && Eliminate the temporary Index
PACK && PACK out the duplicate records
现在你的Foxpro数据表已准备好了。
祝你好运