创建流水号表

CREATE TABLE SystemSerialNo
(
SerialNoId INT PRIMARY KEY IDENTITY,
TableName VARCHAR(60),
Prefix VARCHAR(20),
LatestDate VARCHAR(8),
MaxSerialNo INT ,
DataVersion timestamp )

创建存储过程

-- 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

运行

工作中有使用,在此备忘

SQL创建流水号的更多相关文章

  1. SQL 创建索引的作用以及如何创建索引

    SQL 创建索引的作用以及如何创建索引 SQL 创建索引的作用 一.使用索引的优点: 1.通过唯一性索引(unique)可确保数据的唯一性 2.加快数据的检索速度 3.加快表之间的连接 4.减少分组和 ...

  2. 第16课-数据库开发及ado.net-数据库SQl,创建数据库和表,增删改语句,约束,top和Distinct,聚合函数介绍

    第16课-数据库开发及ado.net 数据库SQl,创建数据库和表,增删改语句,约束,top和Distinct,聚合函数介绍 SQL语句入门(脚本.命令) SQL全名是结构化查询语言(Structur ...

  3. 趣味SQL——创建指定的数据类型

    原创作品,出自 "深蓝的blog" 博客,深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/46908843 趣味 ...

  4. SQL 创建表

    SQL 创建表是通过SQL CREATE TABLE 语句来实现,该语句是DDL SQL语句.CREATE TABLE语句用于创建用于存储数据的表.在创建表时,可以为列定义主键.惟一键和外键等完整性约 ...

  5. mysql创建流水号

    mysql数据库创建流水号 CREATE TRIGGER saledetail_id BEFORE INSERT ON saledetail FOR EACH ROW BEGIN declare n ...

  6. [LINQ TO SQL]使用LINQ TO SQL创建数据库

    这篇博客将介绍如何使用LINQ TO SQL来创建数据库,以及如何映射Table之间的主外键关系. 我们的数据库表关系如下: Province与City之间1:M,City与Area之间1:M的关系. ...

  7. SQL 创建一个只读账户 .

    1.进入sqlserver management studio 2.选择安全性->登录名->右键新建登录名 3.在常规里输入用户名和密码 4.在"用户映射"里“映射到此 ...

  8. MVC中Linq to sql创建数据模型

    1.创建新的 SQL Server 数据库 点击”视图“-->“服务器资源管理器” ,打开 “服务器资源管理器” 窗口,如下图: 右键“数据连接”,选择“创建新的SQL Server 数据库”, ...

  9. sql创建删除修改表的基本操作

    1 建立表格 在建立好数据库以后,就可以根据储存资料的需求,使用SQL叙述建立所有需要的表格(table).建立表格的设定非常多,以建立"world.city"表格来说,它的叙述会 ...

随机推荐

  1. MySQL:procedure, function, cursor,handler

    Procedure & Function Procedure 语法: CREATE [DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name ...

  2. 如何评价一个RPC框架的性能

    协议:数据传输的格式,通信双方的契约.   传输:使用何种传输通道传输数据.   线程:接收到数据,如何分发数据进行处理.

  3. screen:多重视窗管理程序

    screen:多重视窗管理程序 screen [-S SCREEN_NAME]: 创建窗口,可指定窗口名称,如果不指定,则是ID.$HOSTNAME screen -ls: 列出所有的screen窗口 ...

  4. python爬虫学习(8) —— 关于4399的一个小Demo

    堂弟喜欢各种游戏,在没有网络的情况下,上4399显得很无力. 另外,4399广告好多,,而且加载慢.. 怎么办,,写个爬虫吧,,把4399上的"好玩"游戏爬下来. 1. 分析阶段 ...

  5. js入门学习~ 运动应用小例

    要实现的效果如下: 鼠标移入各个小方块,实现对应的效果(变宽,变高,移入透明,移出恢复)~~ (且各运动相互之前不干扰)  主要是练习多个物体的运动框架~~ --------------------- ...

  6. Appium+python的一个简单完整的用例

    最近一直在忙,终于有时间来整理一下,传一个简单的用例,运行之后可以看到用例的报告,希望对大家有帮助. HTMLTestRunner这个包网上有很多,大家可以自己下载. 1 import unittes ...

  7. JAVA设计模式之1-单例模式

    设计模式是什么? 设计模式是一种思路,是在前辈们的软件工程中总结出来的套路,并且这些套路已经经过很多项目的测试,是比较成熟的思路,所以现在来总结一下常见的设计模式. 最简单最常用的就是单例模式: 一般 ...

  8. [LeetCode] Path Sum II 二叉树路径之和之二

    Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...

  9. c#smtp多线程

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  10. iOS推送流程

    1. 在apple开发者帐号上创建一个BundleID,创建证书或者Xcode上都是用这个BundleID(例如com.mycompany.pushDemo) 2. 代码层面: 在capability ...