我们有一个导入功能,可以将数据从excel导入到sql server暂存表中,并执行验证。这是一个现有的功能,并实现如下: 1)用户可以下载excel模板,批量订购小工具。2)用户可以在excel表格中填写单单或多个订单,并上传到应用程序中。3)利用.net SqlBulkCopy特性,将excel数据复制到server中的暂存表中。4)现在我们将这些数据复制到#tempTable中,并对每条记录进行验证,以确定每个标准的正确性,如果发现错误,则在#tempTable的一列中更新相应的错误消息。5)验证后,如果所有记录都被验证成功,那么我们将按顺序插入这些记录,并按计费表进行插入。
为了执行上述步骤,我们有3个SPs: 1) Get_Data(将数据从暂存表复制到#tempTable) 2) Validate_Date (验证#tempTable中的数据) 3) Insert_Data (如果所有记录都已成功验证,则将数据插入表中)
由于可以避免的游标和动态查询的实现,上述SPs无法按业务执行。
现在,我们必须从零开始为其中一个新模块准备另一个导入功能,考虑到性能是一个重要因素。在编写SP时,我已经阅读了许多文章,比如尽可能避免使用游标,使用set nocount等等。
请帮助我识别其他需要注意的领域,同时为这种类型的导入功能编写代码。例如: 1)由于导入数据将从excel表中使用,那么我们是否需要考虑应该注意的最大行数(我们必须执行验证等)?如果是这样的话,请建议如何处理各种数据的验证和插入性能,比如从大到大的数据记录。或者,如果只有有限的数据量,那么如何为这些有限的记录编写代码以获得最大的性能。( 2)是否也应考虑并发访问。像多个用户一样,可以从不同的位置评估导入功能。我知道我们可以使用事务控制并发。如果有更好的方法,请建议。等
这是我第一次使用这种导入功能来提高性能。在编写代码时,请从性能角度建议/分享您的经验。
发布于 2015-11-25 15:06:45
你看,你写过什么,你认为做什么是正确的?像验证和精炼数据一样,避免游标etc.all --你的点是有效的。很可能您在前端进行验证工作(表示层本身),.Or验证可以在前端进行两个level.Basic验证(数据类型验证、非空检查等),然后二级验证(对db的验证).you对db进行验证并一次性插入工作。
其次,考虑到事务,当多个用户试图访问同一个records.Here时,并不是case.Here多个用户会上传自己的记录。因此,您可以避免事务,因为没有锁定的机会。我错了吗?
https://stackoverflow.com/questions/33919334
复制相似问题