创建表

CREATE TABLE CreateSerialNo
(CreateSerialNoId INT PRIMARY KEY IDENTITY(1,1),TableName VARCHAR(60),FixedCharacter   VARCHAR(20),--FixedCharacterLatestDate VARCHAR(8),MaxSerialNo INT ,DataVersion timestamp
)

创建存储过程

-- =============================================
-- Author:    <HK0272>
-- Create date: <2023/03/13>
-- Description:  <自动生成流水号>
-- =============================================
CREATE PROCEDURE [dbo].[GetSerialNo_DoMethod]
@SerialNo nvarchar(100)='' output,
@TableName varchar(100),--表名
@FixedCharacter VARCHAR(20),  --固定字符
@PadLeft INT,    --流水号位数
@ShowDate BIT, --1加年月日(A230313001)  0不加年月日(A001)
@RiseTime datetime --传入年月日
AS
BEGINSET NOCOUNT ON;BEGIN TRYBEGIN TRAN--传入时间为空则自动获取当前时间IF ISNULL(@RiseTime,'')=''BEGINSET @RiseTime=GETDATE()END DECLARE @MaxValue INT,@DataVersion timestamp,@DefaultDateTime VARCHAR(8)IF NOT EXISTS(SELECT 1 FROM CreateSerialNo  WHERE TableName=@TableName AND FixedCharacter=@FixedCharacter)BEGININSERT INTO CreateSerialNo(TableName,FixedCharacter,LatestDate,MaxSerialNo)VALUES (@TableName,@FixedCharacter,CONVERT(VARCHAR(20),@RiseTime,112),1)ENDELSEBEGINSELECT @DataVersion=DataVersion,@DefaultDateTime=LatestDate FROM CreateSerialNo WHERE TableName=@TableName AND FixedCharacter=@FixedCharacter--如果不显示日期,不受日期限制,每次自增+1IF @ShowDate=0BEGINUPDATE CreateSerialNo WITH(ROWLOCK) SET MaxSerialNo=MaxSerialNo+1WHERE TableName=@TableName  AND FixedCharacter=@FixedCharacter AND DataVersion=@DataVersionENDELSEBEGIN--如果在同一天,流水叫已,否则更新日期并重置最大流水号IF @DefaultDateTime=CONVERT(VARCHAR(12),@RiseTime,112)BEGINUPDATE CreateSerialNo WITH(ROWLOCK) SET MaxSerialNo=MaxSerialNo+1WHERE TableName=@TableName  AND FixedCharacter=@FixedCharacter AND DataVersion=@DataVersionENDELSEBEGINUPDATE CreateSerialNo WITH(ROWLOCK) SET LatestDate=CONVERT(VARCHAR(12),@RiseTime,112),MaxSerialNo=1WHERE TableName=@TableName  AND FixedCharacter=@FixedCharacter AND DataVersion=@DataVersionENDENDENDSELECT @SerialNo=FixedCharacter+(CASE @ShowDate WHEN 1 THEN RIGHT(LatestDate,6) ELSE '' END)+(RIGHT(replicate('0',@PadLeft)+CAST(MaxSerialNo AS VARCHAR(10)),@PadLeft))FROM CreateSerialNo WITH(XLOCK,PAGLOCK) WHERE TableName=@TableName  AND FixedCharacter=@FixedCharacterCOMMIT TRANEND TRYBEGIN CATCHROLLBACK TRANEND CATCHreturn 0
END

调用

declare @SerialNo nvarchar(50)=''
declare @InspectDate datetime=getdate()
--获取编号
exec GetSerialNo_DoMethod @SerialNo=@SerialNo output,@TableName='TestTableName',--表名@FixedCharacter='', --固定字符@PadLeft=3,   --流水号位数@ShowDate=1,   --是否包含时间 1:是(A230313001)0:否(A001)@RiseTime=@InspectDate--生成时间,为空默认抓当前时间select @SerialNo

sql自动生成流水号相关推荐

  1. 【深入浅出MyBatis系列八】SQL自动生成插件

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# 深入浅出MyBatis系列 [深入浅出MyBatis系列一]MyBatis入门 [深入浅出MyBatis系列二]配置 ...

  2. 使用sql自动生成测试数据

    在进行代码编写的时候,常常会用到大量的测试数据.手动的进行测试数据的编写费时费力,下面给大家介绍一个使用sql自动生成测试数据的方法. 1)建立测试数据表 CREATE TABLE `datatabl ...

  3. sql自动生成工具_可自动生成代码,5款基于AI的开发工具

    如今,对机器学习潜力感兴趣的程序员都在讨论,如何使用人工智能和基于人工智能的软件开发工具构建应用程序.例如PyTorch和TensorFlow之类的解决方案. 除此之外,机器学习技术正以另一种有趣的方 ...

  4. 自动生成小工具(二):根据建表sql自动生成增删改查sql语句文件

    Mybatis自动生成插件虽然功能强大,但是也略显笨重.我自己开发了一个自动生成的小工具,更加简单,更加轻量级. 一共只有几百行代码,想改的话,直接修改即可.根据自己的实际情况,可以进行灵活的二次开发 ...

  5. Spring Data JPA使用必备(二):Spring Data JPA方法命名规则实现SQL自动生成

    Spring data JPA是一个好东西,但是对于很多习惯于写SQL,直接怼数据库的人来说,这个真的用不习惯,还被一致认为是一个不易于程序员发展的技术.因为JPA提供了标准的封装,在操作数据库的时候 ...

  6. hive sql自动生成id的两种方法随机id和自增id

    文章目录 1.生成自增id:row number() over(order by) 2.随机不重复id: regexp_replace(reflect('java.util.UUID','random ...

  7. sql自动生成汉语拼音和首字母函数[转载]

    /*根据汉字获取全拼1.生成所有读音临时表2.根据Chinese_PRC_CS_AS_KS_WS 排序获取读音 */ CREATE function f_GetPying(@str varchar(1 ...

  8. sql自动生成编码函数

    set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER function [dbo].[f_NextJD]() rETURNS CHAR(9) AS B ...

  9. Oracle自动生成ID,自动编号,自增补零填充

    问题 在pl/sql中,需将某个查询结果插入到一个新表tableNameA中时,如何通过sql自动生成ID列,且形如:ID0001,ID0002,ID0003--. 解决方案 insert into ...

最新文章

  1. c语言x在二进制表示下1的个数,算法:计算十进制数字在二进制表示1的个数,...
  2. 计算机导论摘要,[计算机导论复习摘要.doc
  3. DL之YoloV3:YoloV3论文《YOLOv3: An Incremental Improvement》的翻译与解读
  4. 树形结构:二叉树,分治,合并子树,递归
  5. P1297 [国家集训队]单选错位 期望
  6. apache.camel_Apache Camel 2.11发布
  7. 使用反射处理Java批注
  8. 34个计算机网络易错知识点总结
  9. coverage path planning覆盖路径规划(2021-左海民 )
  10. GCC9.2/Python3.8/Libvirt6.0/QEMU4.2 编译/配置/安装
  11. SQL Server 数据库中的几个常见的临界值
  12. layui框架弹出窗口,点击确定跳转指定地址
  13. 简历里计算机能力,简历上计算机能力怎么写
  14. 一网打尽!所有PMP的计算公式都在这里啦,赶紧学起来(1)
  15. Qcom平台测试wifi TIS需要关闭wifi扫描、漫游和休眠
  16. 清理win7系统盘空间
  17. html5 audio左侧,HTML5之Audio(四)—— 左右声道
  18. OpenCV-Python击中击不中HITMISS形态变换详解
  19. 计算机一级考试PPT部分几分,计算机一级考试PPT幻灯片和最后一题(就是自己输网址)各有多少分啊...
  20. mysql数据库下载、安装、使用

热门文章

  1. 使用Yolov5训练自己制作的数据集,快速上手
  2. PMP报名入口在哪里?不废话!
  3. 平价气传导耳机哪个牌子好?气传导耳机推荐这几款
  4. 光速不变_两点技术:以光速解决阵列问题
  5. Markdown语法学习笔记(Typora)
  6. K210(SiPEED MaixBit)MicroPython使用参考(七、RTC模块DS1302驱动)
  7. 水清冷冷:AE CC2018安装图文教程攻略(附工具),windows系统64位
  8. Oracle 自定义类型TYPE(subtype, type object, type body, type table) 用法
  9. 把极坐标化为直角坐标c语言,极坐标与直角坐标的互化
  10. 【内含实物图】一款可独立行走且支持远程对话的微型巡逻摄像头——硬件方案