本帖最后由 hessen 于 2022-5-16 18:38 编辑
数据批量导入之高级控制
在快表中导入数据有很多种方法,常用的有系统的批量导入数据的功能和自己设计导入模板实现的方法。如果在导入数据时,没有脏数据则可以直接导入,而如果要对数据进行一系列的验证后导入时则可以定义模板来完成。从8.2.3版本开始快表提供了不用设计模版,实现在通过系统批量导入功能导入数据时进行自定义验证的高级扩展控制功能,可以最大限度的实现灵活自主可控的验证设置。能够充分利用SQL的强大功能实现随心所欲的控制验证。下面介绍下实现的方法:
下面是基础数据规范,张三、李四、王五分别对应北京、广州、上海。要求数据导入到第二张图的明细表中。导入时需要遵循第一张图的逻辑规范。
实现后效果如下:这里演示了两种效果
下面介绍具体的导入设置:
进入模板设计状态,打开高级扩展控制,新建扩展公式,并进入执行设置界面书写下面的脚本。
- Declare @name As Varchar(50),@ck As Varchar(50),@oldck As Varchar(50);
- Declare Cursor1 Cursor For
- Select F_818,F_819 From T_123 Where F_820 = #导入标识
- Open Cursor1
- Fetch Next From Cursor1 Into @name,@ck
- While @@fetch_status = 0
- Begin
- Select @oldck = F_816 From T_121 Where F_815 = @name
- If @oldck <> @ck
- Begin
- Delete From T_123 Where F_820 = #导入标识
- --Select '数据中不能存在***,请修改后再进行导入!'
- Select @name + '所对应的仓库名称应该为【' + @oldck + '】而不是【' + @ck + '】请修改后再进行导入!'
- End
- Fetch Next From Cursor1 Into @name,@ck
- End
- Close Cursor1
- Deallocate Cursor1
复制代码
下面是第二种验证特定值是否存在的导入:
写法如下:
- IF EXISTS(SELECT 1 FROM T_123 WHERE F_819 in( '成都') AND F_820 = #导入标识)
- Begin
- DELETE FROM T_123 WHERE F_820 = #导入标识
- SELECT '数据中不能存在成都,请修改后再进行导入!'
- End
复制代码
第一种则是按照文头的逻辑来验证是否合法,第二种则是验证了是否存在特定值。这里仅仅是给出了参考的写法以及使用场景,您可以根据您的实际需要灵活做出变通。通过此方法验证,需要在导入的目的表中定义一个字段别名为 导入标识 ,其中脚本中#导入标识是变量可以在扩展控制底部的菜单变量中直接选择。同时点击底部菜单示例也会有示例脚本写入方便参考改写。
下面是一个带导入后自动编号的写法
- Declare @name As Varchar(50),@ck As Varchar(50),@oldck As Varchar(50);
- Declare @num As Varchar(50),@a As Varchar(50);
- Declare Cursor1 Cursor For
- Select F_818,F_819,Seq From T_123 Where F_820 = #导入标识
- Open Cursor1
- Fetch Next From Cursor1 Into @name,@ck,@a
- While @@fetch_status = 0
- Begin
- DECLARE @return_value table(aid varchar(50),num varchar(50))
- Insert Into @return_value exec [dbo].[KBGetID] '订单编号'
- Select @num = num from @return_value
- Update T_123 Set F_909 = @num Where Seq = @a and F_820 = #导入标识
- Select @oldck = F_816 From T_121 Where F_815 = @name
- If @oldck <> @ck
- Begin
- Delete From T_123 Where F_820 = #导入标识
- --Select '数据中不能存在***,请修改后再进行导入!'
- Select @name + '所对应的仓库名称应该为【' + @oldck + '】而不是【' + @ck + '】请修改后再进行导入!'
- End
- Fetch Next From Cursor1 Into @name,@ck,@a
- End
- Close Cursor1
- Deallocate Cursor1
- ---BATCHWORKFLOW
复制代码
|
|
hessen