周一至周五 : 08:30 - 17:30 客服专员电话/微信:17301649370 QQ:2902102332
微信咨询

扫码微信咨询

关注公众号

关注微信公众号

电话: 021 5161 9370
返回顶部
数据批量导入之高级控制
显示全部楼层 倒序浏览 发表日期 2022-05-14 12:58:48 2244次阅读 0次回复
本帖最后由 hessen 于 2022-5-16 18:38 编辑

数据批量导入之高级控制

在快表中导入数据有很多种方法,常用的有系统的批量导入数据的功能和自己设计导入模板实现的方法。如果在导入数据时,没有脏数据则可以直接导入,而如果要对数据进行一系列的验证后导入时则可以定义模板来完成。从8.2.3版本开始快表提供了不用设计模版,实现在通过系统批量导入功能导入数据时进行自定义验证的高级扩展控制功能,可以最大限度的实现灵活自主可控的验证设置。能够充分利用SQL的强大功能实现随心所欲的控制验证。下面介绍下实现的方法:


下面是基础数据规范,张三、李四、王五分别对应北京、广州、上海。要求数据导入到第二张图的明细表中。导入时需要遵循第一张图的逻辑规范。
20220514122436.png


20220514122504.png

实现后效果如下:这里演示了两种效果

GIF 2022-05-14 12-37-55.gif

GIF 2022-05-14 12-33-55.gif


下面介绍具体的导入设置:
进入模板设计状态,打开高级扩展控制,新建扩展公式,并进入执行设置界面书写下面的脚本。


20220514123201.png


  1. Declare @name As Varchar(50),@ck As Varchar(50),@oldck As Varchar(50);   
  2. Declare Cursor1 Cursor For     
  3. Select F_818,F_819 From T_123 Where  F_820 = #导入标识   
  4. Open Cursor1   
  5. Fetch Next From Cursor1 Into @name,@ck   
  6. While @@fetch_status = 0   
  7. Begin     
  8.         Select @oldck = F_816 From T_121 Where F_815 = @name   
  9.         If @oldck <> @ck  
  10.                 Begin      
  11.                         Delete From T_123 Where F_820 = #导入标识      
  12.                         --Select '数据中不能存在***,请修改后再进行导入!'      
  13.                         Select @name + '所对应的仓库名称应该为【' + @oldck + '】而不是【' + @ck + '】请修改后再进行导入!'   
  14.                 End  
  15. Fetch Next From Cursor1 Into @name,@ck  
  16. End   
  17. Close Cursor1   
  18. Deallocate Cursor1  
复制代码




下面是第二种验证特定值是否存在的导入:


20220514123142.png


写法如下:


  1. IF EXISTS(SELECT 1 FROM T_123 WHERE F_819 in( '成都') AND F_820 = #导入标识)
  2. Begin
  3.     DELETE FROM T_123 WHERE F_820 = #导入标识
  4.     SELECT '数据中不能存在成都,请修改后再进行导入!'
  5. End
复制代码


第一种则是按照文头的逻辑来验证是否合法,第二种则是验证了是否存在特定值。这里仅仅是给出了参考的写法以及使用场景,您可以根据您的实际需要灵活做出变通。通过此方法验证,需要在导入的目的表中定义一个字段别名为  导入标识   ,其中脚本中#导入标识是变量可以在扩展控制底部的菜单变量中直接选择。同时点击底部菜单示例也会有示例脚本写入方便参考改写。








下面是一个带导入后自动编号的写法
  1. Declare @name As Varchar(50),@ck As Varchar(50),@oldck As Varchar(50);
  2. Declare @num As Varchar(50),@a As Varchar(50);   
  3. Declare Cursor1 Cursor For     
  4. Select F_818,F_819,Seq From T_123 Where  F_820 = #导入标识   
  5. Open Cursor1   
  6. Fetch Next From Cursor1 Into @name,@ck,@a   
  7. While @@fetch_status = 0
  8. Begin

  9. DECLARE        @return_value table(aid varchar(50),num varchar(50))
  10. Insert Into @return_value        exec [dbo].[KBGetID] '订单编号'
  11. Select @num = num from @return_value
  12. Update T_123 Set F_909 = @num Where Seq = @a and F_820 =  #导入标识

  13. Select @oldck = F_816 From T_121 Where F_815 = @name
  14.         If @oldck <> @ck  
  15.                 Begin      
  16.                         Delete From T_123 Where F_820 = #导入标识      
  17.                         --Select '数据中不能存在***,请修改后再进行导入!'      
  18.                         Select @name + '所对应的仓库名称应该为【' + @oldck + '】而不是【' + @ck + '】请修改后再进行导入!'   
  19.                 End  
  20. Fetch Next From Cursor1 Into @name,@ck,@a  
  21. End   
  22. Close Cursor1   
  23. Deallocate Cursor1  

  24. ---BATCHWORKFLOW
复制代码






























电话/微信:18049989370 QQ:857188287
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则  允许回帖邮件提醒楼主

快表软件是国内较早研究表格类软件开发平台的团队之一,迄今已有十多年的行业经验.致力于为企事业单位提供实用可靠的数字化平台。
  • 微信公众号

  • 微信小商店

  • 微信客服

  • Powered by Discuz! X3.4 | Copyright © 2022-2024, XiRong Soft. | 快表软件
  • 沪ICP备13033196号 | 营业执照 |上海西戎软件科技有限公司|沪公网安备31011502002146号|沪ICP备13033196号 |