根据表生成流水号
2017-10-25 15:11
155 查看
CREATE TABLE [dbo].[TableWater]( [Tb_id] [int] IDENTITY(1,1) NOT NULL, [Vc_table_name] [nvarchar](90) NULL, [Num_water_no] [varchar](100) NULL, CONSTRAINT [PK_TableWater] PRIMARY KEY CLUSTERED ( [Tb_id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
测试表
测试参数
DECLARE @return_value int, @vmax_waterno bigint
EXEC @return_value = [dbo].[get_waterno] @vtableName = N'testtable', @vcnt = 1, @vmax_waterno = @vmax_waterno OUTPUT
SELECT @vmax_waterno as N'@vmax_waterno'
SELECT 'Return Value' = @return_value
SQL Server 实现:
create PROCEDURE [dbo].[get_waterno] ( @vtableName VARCHAR(90), --表名 @vcnt INT ,--流水号 @vmax_waterno bigint output --最大流水号 ) as BEGIN declare @Vcount int; set @vmax_waterno=0; SELECT @Vcount=count(1) FROM TableWater WHERE vc_table_name=@vtableName ; IF (@Vcount= 0 or @Vcount is null) BEGIN INSERT INTO TableWater(vc_table_name,num_water_no) VALUES(@vtableName, @vcnt ); set @vmax_waterno=@vcnt; --return; END; ELSE BEGIN DECLARE @i bigint; set @i= 1; WHILE (@i<= 1000) begin UPDATE TableWater SET num_water_no=num_water_no+@vcnt WHERE vc_table_name =@vtableName ; IF (@Vcount > 0 ) BEGIN SELECT @vmax_waterno=num_water_no FROM TableWater WHERE vc_table_name=@vtableName; -- return ; break; end; ELSE BEGIN set @i= @i + 1; SELECT @vmax_waterno=num_water_no FROM TableWater WHERE vc_table_name=@vtableName and num_water_no=@vmax_waterno ; set @vmax_waterno= NULL; --return ; break; end; end; end; end;
SQL 调用
---调用存储过程 生成结果表流水号 exec get_waterno "testtable",1,@p_tmp_water_num output; set @p_tmp_water_str= replicate('0',10)+ltrim (@p_tmp_water_num);
Oracle 实现:
PROCEDURE spr_get_waterno ( vtableName IN VARCHAR2, --表名 vcnt IN INT ,--流水号 vmax_waterno OUT number --最大流水号 ) is Vcount int; BEGIN vmax_waterno:= 0; SELECT count(1) into Vcount FROM TableWater WHERE vc_table_name = vtableName ; IF (Vcount= 0 or Vcount is null) THEN BEGIN INSERT INTO TableWater(vc_table_name,num_water_no) VALUES(vtableName, vcnt ); vmax_waterno:= vcnt; --select max_waterno return;-- max_waterno; commit; END; ELSE BEGIN DECLARE i INTEGER; begin i:= 1; WHILE i<= 1000 loop UPDATE TableWater SET num_water_no = num_water_no + vcnt WHERE vc_table_name = vtableName ;-- and num_water_no = max_waterno; commit; IF (Vcount > 0 ) THEN BEGIN SELECT num_water_no INTO vmax_waterno FROM TableWater WHERE vc_table_name = vtableName; -- SET max_waterno = max_waterno + cnt; -- select max_waterno; return ; END ; ELSE BEGIN i:= i + 1; ------------------------------------------------------------------------------- SELECT num_water_no INTO vmax_waterno FROM TableWater WHERE vc_table_name = vtableName and vmax_waterno = num_water_no ; ------------------------------------------------------------------------ vmax_waterno:= NULL; --select max_waterno; return ; END; END IF; END loop; vmax_waterno:= NULL; return; END; end; END IF; COMMIT; END;
oracle 调用
---调用存储过程 生成结果表流水号 spr_get_waterno('testtable',1,p_tmp_water_num); p_tmp_water_str:= LPAD(p_tmp_water_num,20,'0');
相关文章推荐
- 项目中要求根据 一个号码,生成它的流水号
- 根据日期+顺序号生成流水号的存储过程
- SQL SERVER 根据日期自动生成流水号
- 根据时间生成流水号
- Oracle根据表生成系统流水号
- 用JS实现根据当前时间随机生成流水号或者订单号
- Java根据字符串生成固定长度的流水号
- SQLServer根据不同前缀生成多套流水号
- 在项目中,如何根据当前的流水号,生成下一个流水号!
- jquery树形ztree插件根据文件目录路径动态生成树形list的算法
- 基于iView中后台开发(1)-根据列定义动态生成表单
- 最佳MyBatis 根据表结构自动生成代码, domain, dao, mapper 文件
- 【图像拼接】遥感影像镶嵌线生成-如何根据影像自身特点生成完整的镶嵌线网络
- 使用系统表根据存储过程名字生成ADO.NET数据库访问代码
- Silverlight DataGrid 模板列根据内容动态生成控件
- js 根据所输内容生成助记码
- 根据数据库生成word帮助文档
- java生成流水号,例如(XXX201801230001)
- 根据WSDL文件生成代理类
- easyui根据树数据动态生成多个combobox