.net Excel与XML在数据上传上的比较
我正在尝试将Excel(2003)文件上载到SQLServer2005 目前,我们正在使用SSI将文件上载到一个临时表(具有已定义的模式),然后使用存储过程将数据移动到其预期位置。由于数据类型不匹配,这会导致很多错误,有时即使excel文件包含值,也会将空值上载到表中 现在我有以下选择 选项1:(建议) 将数据导入一个表中,表中所有列的类型都为varchar(255)。然后让SP验证每个列的数据类型,然后再将其移动到live。。。在这里,使用IsNumeric、len、IsDate等是否会造成性能问题 选项2:(XML/XSD) 在通过.NET或SSIS导入XML之前,从XL文件生成XML并根据预定义的XSD对其进行验证。与选项1相比,这种方式会慢吗?我也能验证数据的长度吗?我是否能够准确报告导致错误的行和列 从你的观点来看,这在性能和其他方面都很好。。。特别是当出现错误时,我应该能够准确地向用户报告导致错误的行和列 如果有更好的方法处理此问题。。。请让我知道….net Excel与XML在数据上传上的比较,.net,xml,sql-server-2005,excel,ssis,.net,Xml,Sql Server 2005,Excel,Ssis,我正在尝试将Excel(2003)文件上载到SQLServer2005 目前,我们正在使用SSI将文件上载到一个临时表(具有已定义的模式),然后使用存储过程将数据移动到其预期位置。由于数据类型不匹配,这会导致很多错误,有时即使excel文件包含值,也会将空值上载到表中 现在我有以下选择 选项1:(建议) 将数据导入一个表中,表中所有列的类型都为varchar(255)。然后让SP验证每个列的数据类型,然后再将其移动到live。。。在这里,使用IsNumeric、len、IsDate等是否会造成性
谢谢请务必将验证与导入分开。就我个人而言,我会使用MS Access进行验证,因为它比SQL Server更容易解决Excel的数据存储问题,但如果需要,可以使用SQL Server上包含所有varchar(255)字段的表 导入很简单,验证本身就是一个项目
数据可能会在很多方面通过验证测试,每种方式都需要自己的自定义代码。我个人使用前一种方法,导入到一个“无模式”的预暂存表中,然后进行数据清理,将好的行推到一个“适当”的暂存表中(使用与列的预期数据类型匹配的模式)并将坏行移动到与预暂存表匹配的异常表中,并添加一列描述验证失败的列(文本描述,或者,如果您真的想将其规范化,则使用相关错误表的错误代码)。尽管前两个答案完全有效,但我的方法没有什么不同,因此我想在这里提供一条道路 步骤1:我使用Excel宏从Excel生成了一个Xml文件 第2步:在.NET(Windows应用程序)中使用预定义的XSD对其进行验证。XSD包含所有模式信息,如数据类型,甚至包括所需数据的长度、比例和精度 这里的另一个优点是,我可以显示验证失败的精确行和列,以便用户可以轻松地更正它 步骤3:使用SSIS将XML文件上载到一个表中,该表符合给定的模式 到目前为止,我发现的缺点是:
感谢您的帮助。旁注:IsNumeric很少是任何问题的正确答案,除非该问题是“此值是否可转换为任何数字类型?我不在乎哪种类型?”。因此,如果1d50和3.5这两个值都是您可以接受的,请使用它。谢谢您的旁注。。。那么,如果我需要验证int、Decimal、smallint等,我应该使用什么呢?例如,对于int,希望您在比“所有int值”更受约束的域中工作。假设您想要最多6位正数。检查是否有类似的表达式,例如类似于“[0-9][0-9][0-9][0-9][0-9][0-9][0-9]”的列。如果您还可以将您正在寻找的数据类型传递给IsNumeric,那么IsNumeric将非常有用,但遗憾的是,事实并非如此。