本帖最后由 快表帝国客服05 于 2020-2-7 15:32 编辑
批量导入主表时调用自动编号
开发者:快表售前支持05 QQ:2902102332
适用版本:企业版
背景: 主表存在批量导入需求时,自动编号在批量导入时不能自动生成,一般处理办法是人工在导入表中输入自动编号,此种方式效率不太高,同时会存在编号设置错误的问题存在,故本例将通过企业版的扩展菜单功能来实现批量导入后调用系统自动编号实现自动编号。
代码: Declare @No1 varchar(10)
Declare @No2 varchar(10)
Declare @No3 varchar(10)
Declare @No4 varchar(18)
select @No1 = (select count(F_5) FROM T_2 WHERE F_2 ='')
select @No2 = (select SYS_AUTOID.IDMAX FROM SYS_AUTOID WITH (ROWLOCK,UPDLOCK) WHERE NAME = '自动编号')
SET @No3 = 1
select @No4 =(select SYS_AUTOID.IDSET+CONVERT(varchar(100), GETDATE(), 112)from SYS_AUTOID WHERE NAME = '自动编号' )
Create Table #YLS(Yno1 varchar(10),Yno2 varchar(18),Yno3 varchar(99))
While @No3 <= @No1
Begin
Insert Into #YLS(Yno1,Yno2,Yno3) Values(@No2,@No4,(select top 1 ID from T_2 where F_2 ='' order by ID desc ))
Set @No3=@No3+1
Set @No2=@No2+1
update T_2 set F_2 = Yno2 + (right('0000'+cast(Yno1 as varchar(4)),4)),F_3 =#当前用户姓名,F_4 =#当前日期 from #YLS WHERE T_2.ID = Yno3
update SYS_AUTOID set SYS_AUTOID.IDMAX = @No2 , SYS_AUTOID.ENDDATE = GETDATE() from #YLS where SYS_AUTOID.AID = '7b262818-4bf2-4e7a-9498-aca6a67cc670'
End
DROP TABLE #YLS
|
|
说明:
1、SYS_AUTOID为系统自动编号表,其中IDMAX字段为当前序号,IDSET字段为固定文字,AID旁边段为自动编号ID值 2、T_2为批量导入表名,F_5为必填字段,F_2为自动编号字段,F_3为操作人字段,F_4为操作时间字段替换为对应的字段。 3、WITH (ROWLOCK,UPDLOCK) 的作用是在批量导入时锁定对应自动编号的IDMAX值,避免多人操作时出现重复编号。 4、(right('0000'+cast(Yno1 as varchar(4)),4)) 中的‘0000’对应自动编号的数字长度,本文中设置为4位,那在此处则则写4个0,对应后面的二个4也需要改成对应的长度的数字。 5、如批量导入时提示E3008错误!在此上下文中不允许使用子查询。只允许使用标量表达式,说明当前数据库的版本非08版本及以上,需要将 Insert Into #YLS(Yno1,Yno2,Yno3) Values(@No2,@No4,(select top 1 ID from T_2 where F_2 ='' order by ID desc )) 替换为 Insert Into #YLS(Yno1,Yno2,Yno3) select @No2,@No4,(select top 1 ID from T_2 where F_2 = '' order by ID desc) from T_0 6、是否要自动写入当前用户姓名和日期可根据实际情况选择。 7、设置扩展公式时要勾选“批量导入后执行” 8、设置完成后要刷新分组,让拓展公式生效后再测试批量导入。
图片:
|
快表帝国客服05