利用SQL表生成按日期序列的唯一ID
1. 创建一个表,用于存现在最大的ID
SELECT [ID],[PreFix],[Code] FROM [DocumentNO]
2. 增加SP,利用锁表,生成相应的ID
Create PROCEDURE [dbo].[GeneralDocumentNo]
(
@preFix nvarchar(256),
@outCode varchar(256) output
)
AS
BEGIN
-- =============================================
-- Author: xiefs
-- Create date: 2013-12-18
-- Description: 生成系统唯一序列号
-- =============================================
Declare @docNo nvarchar(256),
@month varchar(10),
@day varchar(10),
@no varchar(10),
@num int ,
@lenNum int,
@sql nvarchar(4000),
@maxCode varchar(256),
@tableName varchar(256) SET NOCOUNT ON;
set @tableName='DocumentNo';
set @month=CAST(month(getdate())as varchar);
set @day = CAST(day(getdate())as varchar);
if(LEN(@month)=1) set @month=''+@month;
if(LEN(@day)=1) set @day=''+@day; set @docNo = @preFix+cast(YEAR(getdate()) as varchar)+ @month+@day;
set @sql =N'select top 1 @p=code from '+@tableName +' WITH(holdlock,tablockx) where CHARINDEX('''+@docNo+''',code)=1 order by id desc';
EXEC sp_executesql @sql,N'@p varchar(256) output',@p=@maxCode output ;
if(@maxCode is null)
begin
set @no='';
end;
else
begin
set @no=CAST((CAST(SUBSTRING(@maxCode,len(@docNo)+1,LEN(@maxCode)) as int)+1) as varchar);
end; set @lennum = LEN(@no);
set @num =4;
while @lenNum<4
begin
set @lenNum=@lenNum+1;
set @no=''+@no;
end
insert into documentno(Prefix,Code) values(@preFix,@docNo+@no);
--select @docNo+@no;
set @outCode=@docNo+@no;
END
利用SQL表生成按日期序列的唯一ID的更多相关文章
- SQL表两列取一列唯一值的记录
问下SQL表两列取一列唯一值的 A列 B列 C列 1001 AA 2012-01-02 1001 BB 2012-02-05 100 ...
- Mysql系列七:分库分表技术难题之分布式全局唯一id解决方案
一.前言 在前面的文章Mysql系列四:数据库分库分表基础理论中,已经说过分库分表需要应对的技术难题有如下几个: 1. 分布式全局唯一id 2. 分片规则和策略 3. 跨分片技术问题 4. 跨分片事物 ...
- 利用SQL直接生成模型实体类
在网上找来一个别人写好的,生成实体类的SQL代码 declare @TableName sysname = 'lkxxb' declare @Result varchar(max) = 'public ...
- sql server生成递归日期
WITH Date AS ( SELECT CAST('2008-08-01' AS DATETIME) da UNION ALL FROM Date WHERE da < '2008-08-2 ...
- sql server生成递归日期、连续数据
WITH Date AS ( SELECT CAST('2008-08-01' AS DATETIME) da UNION ALL FROM Date WHERE da < '2008-08-2 ...
- 【SQL Server 学习系列】-- sql 随机生成中文名字
原文:[SQL Server 学习系列]-- sql 随机生成中文名字 ,) )) -- 姓氏 ,) )) -- 名字 INSERT @fName VALUES ('赵'),('钱'),('孙'),( ...
- 分布式系统唯一ID生成方案汇总
系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结.生成ID的方法有很多,适应不同的场景.需求以及性能要求.所以有些比较复杂的系统会有多个ID生成的策略.下面就介绍一些常见 ...
- [转]分布式系统唯一ID生成方案汇总
系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结.生成ID的方法有很多,适应不同的场景.需求以及性能要求.所以有些比较复杂的系统会有多个ID生成的策略.下面就介绍一些常见 ...
- 分布式系统唯一ID生成方案汇总【转】
转自:http://www.cnblogs.com/haoxinyue/p/5208136.html 系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结.生成ID的方法有很 ...
随机推荐
- HDU 4762 Cut the Cake(高精度)
Cut the Cake Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- zabbix触发器函数 count
转摘至梅总文章 一直没用过这个函数,今天研究了下,确实很有用(用过的忽略): 之前很多功能都是用max,min,avg曲线实现的,其实用count最合理(如典典刚用的高防持续N次ping超时). ...
- Hive中创建结构体、数组以及map
ROW FORMAT DELIMITED 分隔符设置开始语句 FIELDS TERMINATED BY:设置字段与字段之间的分隔符 COLLECTION ITEMS TERMINATED BY:设置一 ...
- Android Studio 使用socks代理
Android Studio 使用socks代理 准备工作 1. 从https://www.privoxy.org/下载Privoxy软件 2. 安装Privoxy 3. 在Privoxy安装目录找到 ...
- cmd变量,参数,for循环,
@echo offrem *****************************************************rem Create By Q_rui CopryRight@_ ...
- mysql中的blob和text区别
经过查询资料发现 除了blob 还有tinyblob longblob mediumblob 当然text还有tinytext mediumtext longtext 都是最为大的存储 本质区别主要是 ...
- 好记性不如烂笔头-linux学习笔记2kickstart自动化安装和cacti
kickstart自动化安装的逻辑梳理 主要是安装tftp nfs dhcp 然后配置kickstart 原来就是先安装tftp 可实现不同机器的文件下载 然后在安装nfs 就是主服务器的文件系统 然 ...
- SQL Server数据库partition by 与ROW_NUMBER()函数使用详解[转]
关于SQL的partition by 字段的一些用法心得 先看例子: if object_id('TESTDB') is not null drop table TESTDB create table ...
- TMapCoordinate
MapPiter.Location := TMapCoordinate.Create(59.965, 30.35); MapPiter.Zoom := 10;
- ubuntu安装rtx
终端安装RTX sudo apt-get install wine 安装wine下的window扩展包安装工具winetricks,在终端下输入: sudo wget http://winetrick ...