Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >SQL创建流水号

SQL创建流水号

作者头像
用户1055830
发布于 2018-01-18 07:45:09
发布于 2018-01-18 07:45:09
98800
代码可运行
举报
文章被收录于专栏:飞扬的花生飞扬的花生
运行总次数:0
代码可运行

创建流水号表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE SystemSerialNo
(
    SerialNoId INT PRIMARY KEY IDENTITY,
    TableName VARCHAR(60),
    Prefix VARCHAR(20),
    LatestDate VARCHAR(8),
    MaxSerialNo INT ,
    DataVersion timestamp
    
)

创建存储过程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- Author:    <CallmeYhz,,Name>
-- Create date: <Create Date,,>
-- Description:  <Description,,>
-- [sp_GetSerialNumber] 'Test','CC',4,0
-- @ShowDate 0:编码模式 1:单号模式
-- =============================================
ALTER PROCEDURE [dbo].[sp_GetSerialNumber]  @tableName varchar(100),@Prefix VARCHAR(20),@PadLeft INT,@ShowDate BIT
AS
BEGIN
 SET NOCOUNT ON;
 BEGIN TRY
   BEGIN TRAN
     DECLARE @MaxValue INT,@dataVersion timestamp,@defaultDateTime VARCHAR(8)
     IF NOT EXISTS(SELECT * FROM SystemSerialNo  WHERE tableName=@tableName AND Prefix=@Prefix)
       BEGIN  
         INSERT INTO SystemSerialNo(TableName,Prefix,LatestDate,MaxSerialNo)
           VALUES (@tableName,@Prefix,CONVERT(VARCHAR(20),GETDATE(),112),1)
       END
     ELSE
       BEGIN
         SELECT @dataVersion=DataVersion,@defaultDateTime=LatestDate FROM SystemSerialNo WHERE tableName=@tableName AND Prefix=@Prefix
         --如果不显示日期,则为编码模式,最大编码加一,不受日期限制
         IF @ShowDate=0
            BEGIN
                UPDATE SystemSerialNo WITH(ROWLOCK) SET MaxSerialNo=MaxSerialNo+1
                WHERE tableName=@tableName  AND Prefix=@Prefix AND DataVersion=@dataVersion
            END
        ELSE
            BEGIN
             --如果在同一天,最大编码加一,否则更新日期并重置最大编码
             IF @defaultDateTime=CONVERT(VARCHAR(12),GETDATE(),112)
                BEGIN
                    UPDATE SystemSerialNo WITH(ROWLOCK) SET MaxSerialNo=MaxSerialNo+1
                    WHERE tableName=@tableName  AND Prefix=@Prefix AND DataVersion=@dataVersion
                END
            ELSE
                BEGIN 
                    UPDATE SystemSerialNo WITH(ROWLOCK) SET LatestDate=CONVERT(VARCHAR(12),GETDATE(),112),MaxSerialNo=1
                    WHERE tableName=@tableName  AND Prefix=@Prefix AND DataVersion=@dataVersion                
                END
            END 
       END  
     SELECT Prefix+(CASE @ShowDate WHEN 1 THEN RIGHT(LatestDate,6) ELSE '' END)+(RIGHT(replicate('0',@PadLeft)+CAST(MaxSerialNo AS VARCHAR(10)),@PadLeft))
         FROM SystemSerialNo WITH(XLOCK,PAGLOCK) WHERE tableName=@tableName  AND Prefix=@Prefix
    COMMIT TRAN
 END TRY
 BEGIN CATCH  
   ROLLBACK TRAN    
 END CATCH  
END

运行

 工作中有使用,在此备忘

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-10-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
曾今的代码系列——获取当天最大流水号存储过程
获取当天最大流水号存储过程 alter procedure usp_getSelfSeqNo ( @seqName nvarchar(32), @result int output ) as begin --判断当天是否存在该名字的流水号 begin tran declare @todayCount int select @todayCount=COUNT(*) from T_DailySeqNo where SeqName=@seqName a
用户1161731
2018/01/11
7360
曾今的代码系列——获取当天最大流水号存储过程
使用SQLServer同义词和SQL邮件,解决发布订阅中订阅库丢失数据的问题
最近给客户做了基于SQLServer的发布订阅的“读写分离”功能,但是某些表数据很大,经常发生某几条数据丢失的问题,导致订阅无法继续进行。但是每次发现问题重新做一次发布订阅又非常消耗时间,所以还得根据“复制监视器”的提示,找到丢失的数据,手工处理。 定位缺失数据 首先,找到出问题的同步语句,在发布服务器的“复制监视器”上事务订阅的详细信息里面,找到出错的信息 尝试的命令: if @@trancount > 0 rollback tran (事务序列号: 0x0000992600000D09007F00000
用户1177503
2018/02/27
1.6K0
使用SQLServer同义词和SQL邮件,解决发布订阅中订阅库丢失数据的问题
SQL常用脚本大全,建议收藏!
大家好,我是俊欣 。之前我为大家分享过 100个开箱即用 的 Shell 脚本,深受欢迎 。但作为一名数据人,在工作中也会遇到许多比较常用的SQL脚本,今天呢,我就整理总结出来分享给大家,希望能有所帮助。
用户6888863
2022/06/08
1.7K0
SQL常用脚本大全,建议收藏!
sql语句总结,大家可以收藏了面试一定有用!!!
原文:https://blog.csdn.net/u012562943/article/details/50432733
用户5224393
2019/08/13
9570
21个SQL实用脚本
title在和titleofcourtesy进行拼接后符合条件的就只有ID为6,7,8,9的了
SQL数据库开发
2024/04/25
1930
21个SQL实用脚本
在数据库上实现类似铁路售票锁票功能
要实现铁路售票那样的效果,如果有票查询到就锁定票,如果客人不购买再将票放回票池,这样可以保证前来买票的旅客只要查询到有票就一定能够买到票。我们可以通过给数据库增加一个锁定的标志字段来完成,但这里我们可以试试数据库本身的功能能否实现这个需求。 首先想到的是事务,如果对一个表开始更新以后,那么另外一个会话查询这个标的时候,会等待前一个更新数据的会话释放事务,这是因为普通的SQL读操作内部其实使用了“已提交读”的事务隔离级别,可以保证数据的准确性。但是这不符合我们的需求,我们希望另外一个查询会话能够很快的进行查询
用户1177503
2018/02/26
8150
一套简单实用的SQL脚本,总有你需要的
title在和titleofcourtesy进行拼接后符合条件的就只有ID为6,7,8,9的了
猴哥yuri
2019/12/05
4690
SQL Server 监控统计阻塞脚本信息
数据库产生阻塞(Blocking)的本质原因 :SQL语句连续持有锁的时间过长 ,数目过多, 粒度过大。阻塞是事务隔离带来的副作用,它是不可避免的,而且是一个数据库系统常见的现象。 但是阻塞的时间和出现频率要控制在一定的范围内,阻塞持续的时间过长或阻塞出现过多(过于频繁),就会对数据库性能产生严重的影响。
全栈程序员站长
2022/07/05
8170
SQL Server 监控统计阻塞脚本信息
数据库干货:整理SQLServer非常实用的脚本
今天给大家分享自己在工作当中用到的SQLServer一些常用的脚本,希望能对大家有所帮助!
小明互联网技术分享社区
2021/02/25
3550
数据库干货:整理SQLServer非常实用的脚本
mssql全库查找且替换字段
两个业务实体合并。假设业务实体为人员A和人员B,需要将两个人员的相关数据合并,且保留人员B,删掉人员A。
cultureSun
2023/11/24
1830
重写了MSSQL分页存储过程,附完整sql脚本
晚上花了1小时重写了MSSQL数据库中的分页存储过程,采用ROW_NUMBER的方式,需要MSSQL2005及以上版本支持。
崔文远TroyCui
2019/02/26
1.1K0
SQL基础用法(实例二)
1 /* 2 3 4 2006年10月01日 5 6 SQL Server 数据库的高级操作 7 (1) 批处理 8 (2) 变量 9 (3) 逻辑控制 10 (4) 视图 11 (5) 函数 12 (6) 高级查询 13 14 */ 15 16 (1)批处理 17 将多条SQL语句作为一个整体去编译,生成一个执行计划,然后,执行! 18 理解批处理的关键在于"编译",对于由多条语句组成的一个批处理, 1
用户1112962
2018/07/04
7990
mysql
    mysqladmin -u root -p ab12 password djg345
java好学者
2020/05/09
6130
SQL Server 数据库清除日志的方法
SQLSERVER的数据库日志占用很大的空间,下面提供三种方法用于清除无用的数据库日志文件 方法一: 1、打开查询分析器,输入命令 BACKUP LOG database_name WITH NO_LOG 2、再打开企业管理器--右键要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至xxm,这里会给出一个允许收缩到的最小m数,直接输入这个数,确定就可以了。 方法二: 设置检查点,自动截断日志   一般情况下,SQL数据库的收缩并不能很大程度上减小数
逸鹏
2018/04/11
4.7K0
用Sql生成数据插入Sql脚本
CREATE PROCEDURE dbo.UspOutputData @tablename sysname AS declare @column varchar(1000) declare @columndata varchar(1000) declare @sql varchar(4000) declare @xtype tinyint declare @name sysname declare @objectId int declare @objectname sysname decl
脑洞的蜂蜜
2018/02/01
1.3K0
mysql sql语句大全
根据已有的表创建新表: A:create table tabnew like tabold (使用旧表创建新表) B:create table tabnew as select col1,col2… from tabold definition only 5、说明:删除新表
统计学家
2019/04/10
12.1K1
关于SQL Server 镜像数据库快照的创建及使用
从SQL Server 2005 SP1 起,SQL 开始支持数据库镜像。它的设计目的是试图为SQL Server 提供一个具有实时性数据同步的灾难恢复技术,即能够提供数据冗余备份,切换起来比较方便。每个主体数据库只能有一个镜像数据库。镜像数据库作为主体数据库的一个副本,在主体数据库发生故障、不可访问时能够迅速恢复数据库访问,提供故障恢复功能。镜像数据库一直处于“恢复”状态,因此不能被直接访问。
东山絮柳仔
2021/03/20
2.2K0
SQL之经典SQL语句大全
经典SQL语句大全 一、基础 1、说明:创建数据库 CREATE DATABASE database-name  2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建 备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat' --- 开始 备份 BACKUP DATABASE pubs TO testBack  4
互联网金融打杂
2018/04/03
1.4K0
SQL语句大全(3)
错误!未找到目录项。 set @strSQL = 'select count(*) as Total from [' + @tblName + '] where 1=1 安定 '+ @strWhere 2、收缩数据库 --重建索引 DBCC REINDEX DBCC INDEXDEFRAG --收缩数据和日志 DBCC SHRINKDB DBCC SHRINKFILE
py3study
2020/01/14
7880
数据库基本----SQL语句大全
EXEC sp_addumpdevice 'disk', 'testBack', 'c:/mssql7backup/MyNwind_1.dat'
阳光岛主
2019/02/19
6.2K0
相关推荐
曾今的代码系列——获取当天最大流水号存储过程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验