博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
根据表生成流水号
阅读量:5325 次
发布时间:2019-06-14

本文共 4019 字,大约阅读时间需要 13 分钟。

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 --最大流水号)asBEGIN   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');

 

转载于:https://www.cnblogs.com/Warmsunshine/p/7728965.html

你可能感兴趣的文章
ERROR: duplicate key value violates unique constraint "xxx"
查看>>
激活office 365 的启动文件
查看>>
无法根据中文查找
查看>>
[简讯]phpMyAdmin项目已迁移至GitHub
查看>>
转载 python多重继承C3算法
查看>>
【题解】 bzoj1597: [Usaco2008 Mar]土地购买 (动态规划+斜率优化)
查看>>
css文本溢出显示省略号
查看>>
git安装和简单配置
查看>>
面向对象:反射,双下方法
查看>>
鼠标悬停提示文本消息最简单的做法
查看>>
课后作业-阅读任务-阅读提问-2
查看>>
面向对象设计中private,public,protected的访问控制原则及静态代码块的初始化顺序...
查看>>
fat32转ntfs ,Win7系统提示对于目标文件系统文件过大解决教程
查看>>
Awesome Adb——一份超全超详细的 ADB 用法大全
查看>>
shell cat 合并文件,合并数据库sql文件
查看>>
Android 将drawable下的图片转换成bitmap、Drawable
查看>>
介绍Win7 win8 上Java环境的配置
查看>>
移动、联通和电信,哪家的宽带好,看完你就知道该怎么选了!
查看>>
Linux设置环境变量的方法
查看>>
构建自己的项目管理方案
查看>>